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

Posted

技术标签:

【中文标题】如何在不重新启动的情况下在 Express 上重新加载一个文件?【英文标题】:How to reload one file on Express without restarting? 【发布时间】: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/...?这些功能的真正目的是添加路由器。 【参考方案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

【讨论】:

以上是关于如何在不重新启动的情况下在 Express 上重新加载一个文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不重新加载 visibleCell 的情况下在 collectionView 上重新加载数据

Gatsby + Contentful - 如何在不重新启动服务器的情况下在本地重做 GraphQL 查询(npm run dev)?

如何在不重新加载的情况下在同一页面上提交文件[重复]

Django:如何在不重新加载的情况下在页面上显示更新的信息

如何在不重新启动我的 Express.js 项目的情况下刷新 API 端点

如何在不刷新页面的情况下在 ReactJS 中重新加载?