0

我想开发一个 Express 网站,它既可以独立运行,也可以作为更大服务器的一部分运行,同时允许一定程度的配置。

例如,假设我有一个大型主服务器server.js,我编写了另一个服务器app.js,它定义了一个/*提供小型服务的路由。我希望能够:

  • 独立运行app.js,它将通过localhost:port/
  • 在其中定义一个server.js映射到该服务器的路由,例如,以便/app/*允许app.js处理请求。

通读Smashing Node,我看到如果我在 中定义 Express 服务器及其路由app.js,我可以使用:server.use('/app', require('app.js')来使用它的路由。这种方法的问题是我看不到如何将任何配置选项传递给app.js.

4

1 回答 1

1

您可以将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;

然后在其他文件中:

var app = require("app.js")({ static: __dirname + "/public" });

请注意,它是一个单例,因此对模块函数的进一步调用将返回相同的服务器:

app == require("app.js")();

我相信你可以根据自己的需要进行调整。

于 2013-07-17T20:59:45.283 回答