Node Js:如何在服务器的开头执行异步函数

时间:2018-01-03 16:22:59

标签: javascript node.js callback next

我想从导出的文件中运行一个函数作为应用程序中的第一个函数(异步方式)。

此功能必须在运行服务器时首先执行,并询问我们它是否是本地或生产环境!

该功能在配置文件中:

//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请求时。

那么如何使这个函数以异步方式运行的问题:作为应用程序的第一个函数(必须阻塞服务器,直到我引入此函数中提到的命令行)?

1 个答案:

答案 0 :(得分:0)

此功能签名

app.use(function(next){...});

错了。它应该是:

app.use(function(req, res, next){...});

所以,因为你的函数参数错误,你使用了错误的东西next,当有人试图调用它时会出错。

因此,在您的代码中更改此内容:

//app.js:
app.use(function(next){
    require('./config/config')(next);
}); 

到此:

//app.js:
app.use(function(req, res, next){
    require('./config/config')(next);
});