Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 快速:将选项传递到包含的服务器_Node.js_Express - Fatal编程技术网

Node.js 快速:将选项传递到包含的服务器

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

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

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

  • 运行
    app.js
    standalone,它将通过
    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")();