Node.js 快速:将选项传递到包含的服务器
我想开发一个Express网站,既可以独立运行,也可以作为更大服务器的一部分运行,同时允许一定程度的配置 例如,假设我在Node.js 快速:将选项传递到包含的服务器,node.js,express,Node.js,Express,我想开发一个Express网站,既可以独立运行,也可以作为更大服务器的一部分运行,同时允许一定程度的配置 例如,假设我在server.js中有一个大型主服务器,我编写了另一个服务器app.js,它定义了一个路由/*,以提供一个小型服务。我希望能够: 运行app.jsstandalone,它将通过localhost:port/ 在server.js中定义映射到此服务器的路由,例如,/app/*将允许app.js处理请求 通过阅读Smashing Node,我发现如果我在app.js中定义一个E
server.js
中有一个大型主服务器,我编写了另一个服务器app.js
,它定义了一个路由/*
,以提供一个小型服务。我希望能够:
- 运行
standalone,它将通过app.js
localhost:port/
- 在
中定义映射到此服务器的路由,例如,server.js
将允许/app/*
处理请求app.js
通过阅读Smashing Node,我发现如果我在
app.js
中定义一个Express服务器及其路由,我可以使用:server.use('/app',require('app.js'))
以利用其路由。这种方法的问题是,我不知道如何将任何配置选项传递给app.js
您可以将app.js模块作为可调用函数编写:
var express = require("express");
var app; // <-- note the global
var initialize = function(conf) {
if (app) {
return app;
}
conf = conf || {};
app = express();
// here goes the configutation code, for example:
if (conf.static) {
app.use(express.static(conf.static));
}
return app;
};
if (require.main === module) {
// if standalone, fire it
initialize({ static: __dirname + "/public" });
}
// and export
module.exports = exports = initialize;
请注意,它是一个单例,因此对模块函数的进一步调用将返回相同的服务器:
app == require("app.js")();
我相信你可以根据自己的需要对其进行调整。我在问题中没有提到它,也与我的用例无关,但这似乎是一个单一的事实,这可能会导致这不是一个最佳的解决方案。希望能够在不同的路径上要求同一服务的多个实例似乎不是一个深奥的用例唱不同的选择——我认为一个理想的解决方案会允许这样做。但我认为这已经解决了,因为这满足了最初的问题。
app == require("app.js")();