NodeJS中Express的res对象传入外部模块后调用res.send报错如何解决
报错原因
JavaScript是大小写敏感的编程语言,Express框架的响应对象res提供的响应内容发送方法为全小写开头的res.send(),你在外部动态加载的JS模块中写的是首字母大写的res.Send(),二者不是同一个方法,所以会触发res.Send 未定义的报错。你打印res对象时只能看到对象本身存在,但不会自动提示你拼写的大小写错误。
修复方法
修改外部模块的代码,把res.Send("test")替换为正确的小写方法名即可:
exports.run = function run(req,res) { res.send("test") // 修正方法名大小写 console.log(res) res.end() }
可选优化建议
当前你的动态加载逻辑用的是require加载JS文件,require本身自带模块缓存机制,修改对应的JS文件后需要重启Node服务才能生效。如果你需要实现热更新效果,可以在加载前清除对应模块的缓存:
const jsPath = '/Js/'+list.find(x => x.pageUrl == path).js delete require.cache[require.resolve(jsPath)] const js = require(jsPath) js.run(req,res)
内容的提问来源于stack exchange,提问作者amogus6969
相关产品推荐
相关产品推荐

