如何在不重新启动的情况下在 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:如何在不重新加载的情况下在页面上显示更新的信息