gpt4 book ai didi

javascript - 如何使用函数、类和 req.pipe 模块化 Express 应用程序?

转载 作者:行者123 更新时间:2023-12-01 01:31:39 25 4
gpt4 key购买 nike

下面有两个服务器和两个gqlServers。它们的所有组合都有效。

面临的挑战是使用在多个应用程序之间共享的一些额外的预定义代码模式来扩展 Express,并通过其他方法公开。

servergqlServer 的哪种组合被认为是最佳实践和最佳性能?

服务器:

  • server_A 是一个返回类的函数
  • server_B 是一个返回函数的函数

gqlServer:

  • gqlServer_01 使用 req.pipe
  • gqlServer_02 已将原始 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 包并轻松地在多个项目中重用这些方法。为了清晰起见,该项目被高度简化。

最佳答案

我认为这些示例中的任何一个都不会出现性能问题,因此问题仍然是哪个示例更加模块化。

如果您愿意用这些创建一个 npm 包,那么您不应该在服务器代码中调用 express() 。相反,您应该将 app 作为参数传递。这将允许您重用在其他地方初始化的现有快捷应用程序。因此,我会选择 gqlServer_02

您还希望在每次调用模块函数时创建一个新服务器,因此出于这个原因我会选择 server_A。然而,它需要接收express app 作为参数,以便重用现有的express 对象。我还将 app.listen 调用放在 Server 类的函数内。

关于javascript - 如何使用函数、类和 req.pipe 模块化 Express 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53233940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com