【发布时间】:2018-01-03 16:22:58
【问题描述】:
我想从导出的文件中运行一个函数作为应用程序中的第一个函数(异步方式)。
这个函数必须在运行服务器时首先执行,并且会询问我们是本地环境还是生产环境!
函数在配置文件中:
//config/config.js:
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
module.exports= function(next) {
console.log("call fi,n");
rl.question('Run in production environnement (Y|N) ?', (answer) => {
if(answer === "Y")
process.env.NODE_ENV = 'prod';
else
process.env.NODE_ENV = 'dev';
rl.close();
console.log("asnwerere");
next();
},next);
}
//app.js:
app.use(function(next){
require('./config/config')(next);
});
现在的第一个问题是该函数不是在启动服务器时运行而是在接收到HTTP请求时。
那么问题是如何让这个函数以异步方式运行:作为应用程序的第一个函数(必须阻塞服务器,直到我引入这个函数中提到的命令行)?
【问题讨论】:
-
向我们展示您的
next变量声明。 -
您的错误显示为
require('./config/config')(next);,但您向我们显示的代码是require('./config/database')(next);。这两个是不同的。您是否 100% 确定您正在查看错误的正确代码?您向我们展示的内容应该有效,并且不应导致该错误。我认为您正在查看错误的代码行,并且错误出现在不同的位置。 -
感谢您的合作,是的,您是对的,我一直在寻找错误的代码,我已经在问题中重新提出了问题,但现在我的问题是我希望我的函数在服务器启动时异步但是我的函数现在在收到 HTTP 请求时正在运行。
-
将来,当直接向我发表评论时,请将@username 放在评论的前面,以便我收到通知。否则,我永远不知道你发表了评论给我看。
-
app.use()定义中间件。中间件在请求处理期间运行,而不是在服务器启动时运行。这就是它的作用。如果您希望在服务器启动时运行某些东西,那么不要将代码放在中间件中。把它放在你的服务器启动时运行的代码中,比如你把app.listen()放在同一个地方。
标签: javascript node.js callback next