羽毛可以与羽毛外部管理的路线共存吗

2024-01-23

我们有一个大型应用程序,它使用 Express 进行休息,使用 primus 进行套接字路由。一下子全部变成羽毛是非常困难的。我正在考虑分阶段的方法,我可以采用一些路线并将它们转换为服务,因此任何新路线都将遵循服务模式。我将慢慢迁移应用程序的其余部分。

客户端现在使用 primus 和 angularjs $http 与 nodejs 进行通信。

我们当前的设置看起来像

var http = require('http');
var express = require('express');
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
const csrf = require('csurf');

var Primus = require('primus');
var SocketService = require('./../services/socket-service'); ////this handles existing socket routes from primus client using spark.write

var routesUtils = require('../utilities/routes-utility');
var _ = require('lodash');

module.exports = function(isClusteredDeploy) {
    var app = express();
    var server = http.createServer(app);
    var primus = new Primus(server, {transformer: 'uws'});
    var socketService = SocketService(primus); 
    var commonSocketRoute, commonRoute;

    //primus.library();
    //primus.save(__dirname + '/primus-client.js');

    app.use(bodyParser.urlencoded({
        extended: true
    }));

    app.use(bodyParser.json({
        strict: false,
        limit: '1mb'
    }));

    app.use(cookieParser());

    app.use(csrf({ cookie: true }));
    app.use(function (err, req, res, next) {
        if (err.code !== 'EBADCSRFTOKEN') {
            return next(err);
        }

        res.status(403);
        res.send();
    });
    app.use(function(req, res, next) {
        res.cookie('XSRF-TOKEN', req.csrfToken());
        next();
    });

    server.listen(config.get(constants.CONFIG_App_Port), function() {
        log.info('App server ==> %s is listening on port %d', config.get('rest_host_config.' + config.get('app_key') + '.host'),
            config.get(constants.CONFIG_App_Port));
    });

    //dynamically loading rest routes and socket routes from the file system
    var files = routesUtils.readRoutes(true);
    files.forEach(function(file) {
        if (_.includes(file, 'socket')) {
            commonSocketRoute = require('./../../' + file);
            commonSocketRoute(socketService);
        } else {
            commonRoute = require('./../../' + file);
            commonRoute(app);
        }
    });
};

我想在其中添加一些羽毛,然后慢慢开始转换。这可能吗?


是的,符合标准@feathersjs/express https://docs.feathersjs.com/api/express.html框架集成 您的 Feathers 应用程序也将是一个完全与 Express 兼容的应用程序,它还允许注册服务 https://docs.feathersjs.com/api/services.html.

在你的情况下你会替换var app = express(); with:

const feathers = require('@feathersjs/feathers');
const express = require('@feathersjs/express');

// Create an app that is a Feathers AND Express application
const app = express(feathers());

// Set up REST services (optional)
app.configure(express.rest());

一切都应该继续正常进行。下一步是将自定义 Primus 代码替换为@feathersjs/primus https://docs.feathersjs.com/api/primus.html框架适配器:

const feathers = require('@feathersjs/feathers');
const express = require('@feathersjs/express');
const primus = require('@feathersjs/primus');

// Create an app that is a Feathers AND Express application
const app = express(feathers());

// Set up Primus with SockJS
app.configure(primus({ transformer: 'ws' }));

现在您还可以更换http.createServer设置更简单

const server = app.listen(config.get(constants.CONFIG_App_Port))

因为 Feathers 将处理所有 Express 和 Primus 初始化。 Primus 实例将作为app.primus.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

羽毛可以与羽毛外部管理的路线共存吗 的相关文章

  • 检查号码是否在范围内

    我正在检查来自输入字段的号码是否在范围内 function timeCheck var time trim enterTime value Number prototype between function min max return t
  • 如何知道 Node.js Express 服务器何时启动并可供使用

    有一个应用程序 我想启动节点快速服务器 然后在服务器启动后立即在同一台计算机上自动启动浏览器 如何查询服务器是否已启动并准备就绪 我真的希望在 listen 调用上有某种回调 但似乎没有 我可以等待比我预期的时间更长的时间 但是这是在现场的
  • 用作 Google Chrome 书签

    先说一下我遇到的问题 我需要多次填写同一个网页 而且我需要填写的内容大部分是相同的 但分散在整个网页中 我想到的解决方案 我知道有一种方法可以创建一些 javascript 函数 将其放在 google 书签后面 这样当您在该页面上时 只需
  • Composer 2.0.8 问题 package-versions-deprecated

    使用 PHP 7 2 Installing composer package versions deprecated 1 8 0 Extracting archive Plugin initialization failed include
  • 可以裁剪相机预览吗?

    我还没有找到任何方法来裁剪相机预览然后将其显示在 SurfaceView 上 Android 是否可以裁剪相机预览 您可以在没有覆盖视图的情况下执行此操作 这不适用于所有情况 子类化 ViewGroup 将 SurfaceView 添加为唯
  • Jasper Reports 在新页面上的子报表

    我有一个 jasper 报告 由 6 个子报告组成 每个子报告都有自己的标题部分 现在我需要每个报告都从新页面开始 我尝试添加分页符 但它对我不起作用 在研究这个问题时 我遇到了一个设置技巧isTitleNewPage to true at
  • 服务器打印到标准输出而不是套接字

    我正在研究 UNIX 网络编程中的示例 并且我已将 daytimeclientserv c 改编成此处的代码 服务器按预期向客户端发送日期 时间字符串 但启动时收到的第一个请求除外 当我第一次运行服务器程序 在局域网中的另一台计算机上 时
  • Linq lambda 表达式中的布尔短路求值

    我有以下 Linq lambda 表达式 private IEnumerable
  • 使用 postgresql 数据库时,uwsgi 下的 django 应用程序无法启动

    我设置了一个应用程序AWS 上的 Ubuntu 14 04 gt NGINX gt UWSGI gt DJANGO 应用程序 使用 sqlite3 时该应用程序运行完全正常 但是当我使用django db backends postgres
  • ZfcUser 中的用户状态到底是什么?

    谁能告诉我 用户状态 是什么ZfcUser https github com ZF Commons ZfcUser正在做什么以及为什么我们可能需要它 这个用户状态是什么意思 我认为这不是它所指的角色 可以通过向 zfcuser global
  • Android/SQLite - WHERE 子句上的位操作

    我想知道在 Android 中是否可以做这样的事情 public Cursor getFlowsByCategory int type int categoryID int limit SQLiteDatabase db dbHelper

随机推荐

  • canvas 与 openGL 的功能是什么?

    我知道如果你向 openGL 发送静态且很少变化的纹理 例如像图块一样 openGL 会产生奇迹 但当你有不断变化的精灵时就不行了 是否有可能纯粹从画布上创建类似绑架这样的游戏 它的性能如何 可以使用画布创建诸如绑架之类的游戏 但最终您将在
  • 在经典 ASP 中使用“错误继续下一步”,以及如何处理错误

    大家好 我想问一个关于on error resume next 假设我们有一个循环来浏览记录集 例如 Do while not rs EOF query UPDATE conn execute query rs movenext loop
  • 如何减小tesseract生成的PDF的大小?

    我的 网络 应用程序的设置如下 我获取用户上传的 PDF 文件 对它们运行 OCR 并向他们显示 OCRed PDF 由于一切都在线 因此最小化生成的 PDF 文件的大小是减少用户加载和等待时间的关键 我从用户那里收到的文件是sample
  • 从 preg_match_all() 获取行号

    我正在使用 PHP 的 preg match all 来搜索使用 file get contents 导入的字符串 正则表达式返回匹配项 但我想知道在哪个行号找到这些匹配项 实现这一目标的最佳技术是什么 我可以将文件作为数组读取 并为每一行
  • Jekyll 将每个换行符转换为换行符

    我正在使用 Jekyll 和 kramdown 来制作一个静态站点 今天我注意到每当我将同一个句子继续到新行时 Jekyll 就会插入一个 br 标记那里 以前从未发生过这种情况 由于我所有的 Markdown 文件都没有超过 80 个字符
  • 用于清除 RStudio 中命令历史记录的命令或键盘快捷键

    相当于按 RStudio 历史记录窗口中的小扫帚按钮清除当前会话中的整个历史记录缓冲区的命令或键盘快捷键是什么 Note that I don t mean Ctrl L which clears the command window I
  • 从模板创建用于在 Qt 中打印的 PDF 文档

    我编写一个应用程序 当用户在对话框窗口中插入数据 文档标题 发件人姓名和地址等 时 我的应用程序应该根据该用户数据生成一个 pdf 文件 PDF 文件应该有定义的布局 如下所示 我尝试这样做QPdfWriter但在 pdf 中对齐文本时遇到
  • 为什么接口方法没有主体

    要实现多重继承 我们必须使用接口 但是为什么接口方法没有主体 为什么必须在派生类中重写它们呢 我真的想要一个清晰的答案 不涉及太多计算机术语 我似乎无法理解这一点 我参考了各种参考资料 因为 Java 与 C 或 Eiffel 等语言相比
  • android recyclerView水平和垂直间距

    大家好 我对 android 很陌生 我在 recyclerview 方面遇到了问题 我试图在回收视图中的图像视图之间添加空间 但没有成功 我想要的是 怎么了 以下是我的实现ItemOffsetDecoration java public
  • EmberJS 中的 I18n(路由和一般情况)

    EmberJS 支持国际化应用程序的翻译路由吗 或者至少可以轻松扩展它以支持 i18n 路由 有人有这方面的经验吗 例如 可以以某种方式从语言环境文件动态设置路由字符串吗 另外 当使用 Ember 和 Rails 路由时不必指定两次 这会很
  • 无法分配 CursorWindow

    我正在操作SQLite3我的 Android 应用程序中的数据库 我刚刚从预填充的数据库中读取数据 该数据库有 20 万行和 14 列 条目是文字 所有列的数据类型都是文本 查询最多 11 个字母的单词 例如 ABANDONMENT 效果很
  • 使用 IMongoQueryable 进行单元测试

    我正在使用 NET Core 2 0 和 NET Core MongoDB 驱动程序 我创建了一个像这样的存储库 public interface IRepository
  • Laravel 5.1 eloquent 的 with() 方法中的使用限制

    Eloquent staffGroup StaffGroup where id id gt with staffGroupRight gt first In StaffGroup Model public function staffGro
  • 获取类的实例方法列表

    我有一堂课 class TestClass def method1 end def method2 end def method3 end end 我如何获得此类中的方法列表 method1 method2 method3 TestClas
  • 将参数添加到 @keyframes 属性 Less

    我有一处房产 keyframes 我用autoprefixer编译来添加所需的前缀 我想做的是向动画名称 或任何可能的地方 添加一个参数 以将属性值更改为关键帧键 这就是我现在所拥有的 keyframes loader 0 transfor
  • Node.js Express 模块未正确加载

    Geos Mac hone georgiana npm list Users georgiana local hone email protected cdn cgi l email protection email protected c
  • (Z3Py) 函数声明有什么限制吗?

    函数声明有什么限制吗 例如 这段代码返回 unsat from z3 import def one op op arg1 arg2 if op 1 return arg1 arg2 if op 2 return arg1 arg2 if o
  • 如何让PHP使用代理设置来连接互联网?

    我位于不允许直接连接到互联网的代理服务器后面 我的所有 PHP 应用程序都无法连接到互联网进行更新检查等 我如何告诉 PHP 我的代理设置 我不想在代码中输入代理设置 我希望 PHP 本身通过全局配置设置或类似的东西使用它 如果几乎所有人的
  • 根据类中的变量对类向量进行排序[重复]

    这个问题在这里已经有答案了 我有一个类 其中有一个类型变量int储存在里面 然后我创建了一个向量 其中包含此类 然后我需要对其进行排序 然而 我的问题源于这样一个事实 我需要使用此类中存储的 int 值按升序对向量进行排序 我看过std s
  • 羽毛可以与羽毛外部管理的路线共存吗

    我们有一个大型应用程序 它使用 Express 进行休息 使用 primus 进行套接字路由 一下子全部变成羽毛是非常困难的 我正在考虑分阶段的方法 我可以采用一些路线并将它们转换为服务 因此任何新路线都将遵循服务模式 我将慢慢迁移应用程序