我们有一个大型应用程序,它使用 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(使用前将#替换为@)