0

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

我还有一个sails run执行后台处理的自定义脚本。

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

我想让钩子只在主应用程序启动(sails lift或等效node app.js)上启动,而不是在sails run ....

我已经查看了代码和文档,但我似乎看不到任何官方方法可以做到这一点。

我可以想到两个选择:

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

有没有办法做这两件事?

4

1 回答 1

0

目前,没有内置的方法可以做到这一点,因为 Sails 脚本无法修改配置 - 它们使用默认sails实例及其默认设置。

这是我用来使它工作的hack:

  1. 在钩子的初始化方法中添加对配置选项的检查:

    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 步是基于这个答案,但那里链接的包不再使用这种技术。那个问题和答案也非常古老——至少就像 Sails.js 的答案一样——从以前sails run就存在了。)

于 2018-12-24T16:47:04.727 回答