在不重新启动节点应用程序的情况下更新节点应用程序依赖项

Posted

技术标签:

【中文标题】在不重新启动节点应用程序的情况下更新节点应用程序依赖项【英文标题】:Update node app dependency without restarting node app 【发布时间】:2015-03-17 20:24:54 【问题描述】:

我正在尝试构建一个聊天机器人,用于在 twitch.tv 上连接到 irc,该 irc 会侦听键入的命令,如!command,此时它将执行某种操作。

我的第一个想法是使用单独的文件来存储包含预期命令和正确响应的对象,这样如果我想即时添加新命令,我可以这样做,但我需要找到一种方法在不停止连接到 irc 的节点服务器的情况下,获取导入的命令对象以使用新添加的命令进行更新。

创建一个包含命令的 mongodb 集合会更容易吗

只是想弄清楚现在最好的行动方案是什么

【问题讨论】:

只需将“单独文件”设为一个模块,该模块会抓取一个单独的文件并生成一个对象,然后您就可以在应用程序的整个生命周期内更新该对象,并且任何时候更新,写入这些更改到该文件,以便在下次启动时将文件与所有更改一起拉入。我想知道是否有一个现有的 npm 模块可以做到这一点。 还有,有。 :) npmjs.com/package/node-json-db 没有查看该模块的内部工作原理,我不知道它如何处理来自外部源的更新(我假设这是您所追求的)。您可以使用 mongodb 路线(可能会推荐),也可以使用 fs 模块到 watch() 一个文本文件进行更改,并在更改时重新读取它。 确实如此,我不知道它是否会捕获在节点外部手动修改的 json 文件,尽管我认为这不是预期的。 【参考方案1】:

听起来您确实需要一个数据库,但是,您可以使用 node-json-db 模块将该 json 文件用作数据库。

var JsonDB = require('node-json-db');
var db = new JsonDB("commands", true); // targets file in same directory named "command.json"
var commands = db.getData("/commands");

// ... as a callback somewhere...
db.push("/commands", test:"test", foo: bar:["apple"]);

commands = db.getData("/commands");

【讨论】:

以上是关于在不重新启动节点应用程序的情况下更新节点应用程序依赖项的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在不重新启动 JSF 中的服务器的情况下更新应用程序?

如何在不重新启动活动的情况下更新 recyclerview(来自 sqlite 的数据)

优雅地关闭节点实例,不中途停止任何事情

如何在不重新加载根目录的情况下更新树形面板的根目录?

有没有办法在不重新启动 Solr 服务器的情况下动态更新同义词文件?

如何在不重新启动的情况下更新机器人状态中的“bot.users.size”