【发布时间】:2020-07-19 15:25:21
【问题描述】:
我为自己编写了 node.js 小应用程序,它在处理请求之前使用小 js 代码清除 require 缓存:
let clearCache
if (process.env.NODE_ENV === 'development') {
const {cache} = require
clearCache = (except) => {
for (let key in cache)
if (!except.includes(key) && key.indexOf('/node_modules/') === -1)
delete cache[key]
}
} else {
clearCache = () => {}
}
const { createServer } = require('http')
const persistentPaths = ['/path/to/my/db/file']
createServer((req, res) => {
clearCache(persistentPaths)
require('./handleRequest')(req, res)
}).listen(3000, () => {})
我相信这是在开发中使用应用的最有效方式。
当我更改代码时,它会立即生效,这对我来说很好。
现在我想使用 express.js,但似乎无法使用这种方法。
好的,看来这是一个自我回答的问题,我需要使用 nodemon。
但我真的不想使用监视所有文件并重新启动整个服务器的工具。恐怕会慢很多。
在我的示例中,您可以看到我重新加载了除 db 文件之外的文件,因此我正在开发的应用程序仅连接到数据库一次并保持该连接。如果使用 nodemon 应用程序还需要加载所有 node_modules 代码,每次代码更改时都与 db 建立新连接,也许每次都会连接到 postgres 和 redis。
问题是:我不能这样做,有没有解决方案为 express.js 重新加载模块?
【问题讨论】:
标签: node.js express require reload