无法访问app.set变量?

时间:2017-09-12 13:58:21

标签: javascript node.js express

我正在创建一个带有快递的网络应用程序。

我想将应用运行的端口从callingScript传递到module

callingScript.js

const http = require('http');
const app = require('./module');

const port = process.env.PORT || 3000;

app.set('port', port);

const server = http.createServer(app);

// it serves to the correct port, so the problem is passing it to module.js
app.listen(port);

module.js

const express = require('express');

const app = express();

// this always logs `undefined`
console.log(app.get('port'));

module.exports = app;

如果我运行上述应用程序,我希望看到如下结果:

$ node callingScript.js
3000
$ PORT=8080 bash -c 'node callingScript.js'
8080

但每次都打印undefined

看起来module.js没有从其调用脚本传递变量。

如何通过两者之间的端口?

1 个答案:

答案 0 :(得分:0)

您在错误的时间登录。 首先运行module.js然后运行callingScript.js。带有console.log的{​​{1}}位于app.getmodule.js之前 app.set中的callingScript.js

如果您想对module.js中的代码中的已配置端口执行某些操作,请确保在设置端口后调用该代码。例如,我们在这里导出一个同时包含appfoo的对象,其中foo是一个函数:

const express = require('express');

const app = express();

module.exports = {
    app,
    foo: function() {
        console.log("The port is " + app.get("port"));
    }
};

然后调用它:

const http = require('http');
const m = require('./module');

const port = process.env.PORT || 3000;

m.app.set('port', port);
m.foo(); // <====

const server = http.createServer(m.app);

// it serves to the correct port, so the problem is passing it to module.js
m.app.listen(port);

那就是说,听起来你可能想让你的模块公开一个接受端口的函数并返回一个配置为使用该端口的app(以及需要知道端口是什么的其他东西)