只在“ sails lift”上运行我的sails.js钩子,而不在“ sails run”上运行

时间:2018-12-24 16:47:05

标签: sails.js sails-hook

我有一个自定义的sails.js钩子,该钩子实现了Websocket服务器(我们无法使用内置的socket.js钩子,因为我们需要匹配旧的API)。

我还有一个自定义的sails run脚本,可以进行后台处理。

现在,当运行sails run -name-of-my-script命令时,它还会运行我的钩子,这将为该钩子使用的所有事件提供额外的侦听器。

我想使该挂钩仅在主应用程序启动(sails lift或等效的node app.js)上启动,而不在sails run ...上启动。

我已经仔细阅读了代码和文档,但似乎看不到任何官方的方法。

我可以想到两种选择:

  1. 在挂钩中,检查脚本是否正在运行且未初始化。
  2. 在脚本中,禁用钩子。

有什么办法可以做这些事情吗?

1 个答案:

答案 0 :(得分:0)

目前,尚无内置方法可以执行此操作,因为Sails脚本无法修改配置-它们使用默认sails实例及其默认设置。

这是我用来使其工作的技巧:

  1. 在挂钩的initialize方法中添加对配置选项的检查:

    if (app.config.notifier.active === false) {
        sails.log.verbose('Notifier disabled');
        return cb();
    }
    
    // Continue with notifier hook setup here
    
  2. 将设置环境变量添加到脚本顶部(在module.exports之前:

    process.env.sails_notifier__active = false;
    

(注意:第1步基于this answer,但是链接到那里的软件包不再使用这种技术。该问题和答案也非常古老-至少在Sails.js回答中如此-从{之前{1}}存在。)