2013-07-17 23 views
0

我希望开发一个Express网站,该网站既可以独立运行,也可以作为较大服务器的一部分运行,同时允许进行一定程度的配置。Express:将选项传递到包含的服务器

例如,假设我在server.js中有一个大型主服务器,并且我编写了另一台服务器app.js,它定义了一条路线/*以提供小型服务。我希望能够之一:

  • 运行app.js独立,将通过localhost:port/
  • 提供其路线内server.js映射到该服务器,例如定义一个路由,这样/app/*将使app.js处理请求。

通过阅读砸节点,我看到,如果我定义了一个Express服务器及其app.js路线,我可以使用:server.use('/app', require('app.js')获得使用它的路线。这种方法的问题是我看不到如何将任何配置选项传递给app.js

回答

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")(); 

我相信你可以根据你的需求调整它。

+0

我没有在我的问题中提到它,也没有与我的用例相关,但它似乎是一个单例可能使这不是最佳解决方案。它似乎不是一个深奥的用例,希望能够在不同的路由上使用不同的选项来要求同一服务的多个实例 - 我认为一个理想的解决方案将允许这样做。但我认为这是解决的,因为这符合原始问题。 – Corey

相关问题