【问题标题】:Can feathers co exist with routs managed out side of feathers羽毛可以与羽毛之外管理的路线共存吗
【发布时间】:2018-12-11 12:10:24
【问题描述】:

我们有一个大型应用程序,它将 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


    【解决方案1】:

    是的,通过标准的 @feathersjs/express 框架集成,您的 Feathers 应用程序也将是一个完全兼容 Express 的应用程序,它还允许 register services

    在您的情况下,您可以将 var app = express(); 替换为:

    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());
    

    一切都应该继续正常工作。下一步是用 @feathersjs/primus 框架适配器替换自定义 Primus 代码:

    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 的形式提供。

    【讨论】:

    • 一个问题。从客户端,我必须使用羽毛客户端还是可以继续使用我们构建的现有休息/primus 服务的非羽毛路线?
    • 所以我对此进行了测试。我们有一个使用 primus.authorize() 的代码块,基于错误我可以看到羽毛 primus 没有授权。 primus.authorize 不是我试图查看是否可以利用@feathersjs/authentication 的功能,但我不确定是否可以用于我的用例。在我的例子中,我们的身份验证由公司系统处理,它添加了一个 cookie,节点只是验证我们有一个正确的 cookie 以及 csrf 令牌。
    • 这里是代码块的一部分:primus.authorize(function (req, done) { socketUtility.checkToken(req); if (csrf.verifyCSRFToken(req)) { done(); } else { done({statusCode: 403, message: 'handshake unauthorized'}); } }); 有什么建议吗?
    • 我得到了这个与以下块 app.configure(primus({transformer: 'uws'}, primus => { primus.authorize(....
    猜你喜欢
    • 2018-08-22
    • 2012-11-11
    • 1970-01-01
    • 2021-06-12
    • 2020-03-04
    • 2019-09-21
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多