如何在Node.js应用程序中先运行进程?

时间:2018-10-22 12:22:34

标签: node.js

在其他任何内容开始在decrypt应用程序中运行之前,我想基于环境变量config进行多个Node.js项目。

我正在使用标准node ./app.js启动我的应用。然后,从我的app.js文件的顶部调用一个简单的方法:

function setConfig() {
    var pass = process.env.pass;
    var conf = Encrypt.decrypt(encryptedConfig, pass);
    var configObj = JSON.parse(conf);
    // do stuff with the configObj
}

这很好用,但是由于一切都是async,其他需要配置变量的进程已经在运行并引发错误。

我想要的是先运行setConfig(),然后再进行其他操作。这可行吗?

2 个答案:

答案 0 :(得分:0)

如果例程是同步的,则可以在依赖该例程的例程之前执行该例程。在主模块顶部的其他任何地方执行它可以确保不会出现争用情况:

setConfig();
require('module-that-depends-on-config');

如果例程是异步的,则应将其视为异步以避免竞争条件。最好让所有异步例程都返回Promise,以便可以将它们与主模块中的async函数链接起来:

(async () => {
  await setConfigAsync();
  require('module-that-depends-on-config');
  ...
})().catch(console.error);

答案 1 :(得分:0)

除了接受的答案外,在某些情况下(您不能/不想修改执行的文件)可能有用的是 NODE_OPTIONS 环境变量 + --require ({{1 }}) -r

的参数
node executable

这样,NODE_OPTIONS='--require "./first.js"' node second.js first.js 之前执行。

文档: