下面有两个servers
和两个gqlServers
。它们的所有组合都起作用。
面临的挑战是通过一些通过其他方法公开的应用程序共享的一些其他预定义代码模式来扩展表达。
server
和gqlServer
的哪种组合被认为是最佳实践,并且是表现最佳的组合?
server
:
gqlServer
:
req.pipe
express()
function gqlServer_01(options) {
let gqlApp = express();
gqlApp.use(options.route, function(req, res, next) {
res.send('gqlServer 01');
// next();
});
gqlApp.listen(8001, err => {
if (err) throw err;
console.log(`>> GQL Server running on 8001`);
});
}
function gqlServer_02(app, options) {
app.use(options.route, function(req, res, next) {
res.send('gqlServer 02');
// next();
});
}
// THIS SERVER ?
function server_A(config = {}) {
config = deepmerge(def_opt, config);
let app = express();
app.get('/', function(req, res, next) {
res.send('root');
// next();
});
class Server {
constructor(opt) {
this.opt = opt;
}
gql(props = {}) {
// THIS GQL SERVER ?
gqlServer_01({ route: '/gql-01' });
app.use('/gql-01', function(req, res) {
req.pipe(request(`http://localhost:8001/gql-01`)).pipe(res);
});
// OR THIS GQL SERVER ?
gqlServer_02(app, { route: '/gql-02' });
}
}
app.listen(8000, err => {
if (err) throw err;
console.log(`>> Server running on 8000`);
});
return new Server(app, config);
}
// OR THIS SERVER ?
function server_B(config = {}) {
config = deepmerge(def_opt, config);
let app = express();
app.get('/', function(req, res, next) {
res.send('root');
// next();
});
app.gql = function(props = {}) {
// THIS GQL SERVER ?
gqlServer_01({ route: '/gql-01' });
app.use('/gql-01', function(req, res) {
req.pipe(request(`http://localhost:8001/gql-01`)).pipe(res);
});
// OR THIS GQL SERVER ?
gqlServer_02(app, { route: '/gql-02' });
};
app.listen(8000, err => {
if (err) throw err;
console.log(`>> Server running on 8000`);
});
return app;
}
目标是拥有最佳的解决方案,以便以此创建一个npm软件包并轻松地在多个项目中重用这些方法。为了清楚起见,该项目进行了高度简化。
答案 0 :(得分:2)
在所有这些示例中,我都不认为您会遇到性能问题,因此问题仍然存在于其中。
如果您愿意使用其中的一个npm软件包,则不应在服务器代码中调用express()
。相反,您应该将app
作为参数传递。这将允许您重复使用在其他地方初始化的现有Express应用。因此,我会选择gqlServer_02
您还希望每次调用模块函数时都创建一个新服务器,因此出于这个原因,我将选择server_A
。但是,为了重用现有的Express对象,它需要接收Express app
作为参数。我还将app.listen
调用放在Server
类的函数中。