如何在不重启Express的情况下重新加载一个文件?

5
我正在使用 fs.appendFileSync(...) 将一个新路由添加到 JavaScript 路由文件中,但是由于 Node.Js 需要重新启动才能重新加载文件,因此无法访问已添加的路由。我只需要重新加载被添加的文件即可。
var express = require('express');
var router = express.Router();

module.exports = router;

/* New Routes are appended here.
Example:

router.get('/bobby', function(req, res, next){

});
 */

我已经在 Stack Overflow 上搜索了重新加载文件而不重启服务器的方法,但所有问题都只涉及自动重新加载开发环境,而不是真正的情况。我已经看到了 Nodemon 和 Node-Supervisor 的建议,但那些只适用于开发环境。这可能是一个愚蠢的问题,但我不知道该怎么解决它。谢谢您的阅读。

那么你有修改代码的代码,对吗? - Mathias Dolidon
是的,那是正确的。 - studentTrader24
他在说控制器。那和路由是一样的吗? - studentTrader24
1
抱歉,链接不足够... 我不确定在Node中是否可以这样做。如果您正在使用Clojure或Erlang,则可以这样做... Node不适用于代码修改。为什么不在运行时直接调用app.use/get/...?这些函数的目的就是添加路由器。 - Mathias Dolidon
好的,让我来看看。 - studentTrader24
显示剩余4条评论
1个回答

3
您可以使用require-reload来实现此功能。您应该有一个文件,其中导入了router.js模块,并向其中添加新代码,看起来应该像这样:
var reload = require('require-reload')(require),
var router = reload('router.js');

每次追加新代码时,您应该执行以下操作:
try {
    router = reload('router.js');
} catch (e) {
    console.error("Failed to reload router.js! Error: ", e);
}

可能还需要使用express-route-refresh模块。实际上,它也在内部使用require-reload


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接