【问题标题】:How to reload one file on Express without restarting?如何在不重新启动的情况下在 Express 上重新加载一个文件?
【发布时间】:2015-11-02 23:17:35
【问题描述】:

我正在使用 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 的建议,但那些说它只是为了开发。

这可能是一个愚蠢的问题,但我不知道如何解决。

感谢您的阅读。

【问题讨论】:

  • 所以你有代码修改代码,对吗?
  • 是的,没错。
  • 这是动态路由的尝试。
  • 他说的是控制器。这和路线一样吗?
  • 抱歉,链接不充分...我不太确定您是否可以在 Node.js 中这样做。如果您使用 Clojure 或 Erlang,您会这样做... Node 不是为代码修改而设计的。为什么不简单地在运行时调用app.use/get/...?这些功能的真正目的是添加路由器。

标签: node.js express fs


【解决方案1】:

您可以使用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

【讨论】:

    猜你喜欢
    • 2011-04-04
    • 2015-05-09
    • 1970-01-01
    • 2012-05-13
    • 2014-03-11
    • 1970-01-01
    • 2011-04-03
    • 2011-07-10
    • 1970-01-01
    相关资源
    最近更新 更多