如何修复Express中“TypeError: Router.use()需要中间件函数却收到字符串”错误?
错误原因及修复方案
问题根源
你碰到的TypeError: Router.use() requires a middleware function but got a string错误,是因为错误用app.use()设置视图引擎:
app.use()的作用是挂载中间件函数,要求传入的参数是函数类型,但你传入了两个字符串"view engine"和"jade",不符合方法要求,触发报错。- 代码末尾的
module.exports = router;属于冗余代码,你没定义过router变量,必须删除。
修复后的完整代码
const express = require("express"); const bodyParser = require("body-parser"); const app = express(); // 用app.set替代app.use设置视图引擎 app.set("view engine", "jade"); app.get("/", function(req, res){ res.send("Hello"); }); app.listen(3000, function() { console.log("Server started on port 3000"); });
关键修复说明
- 把
app.use("view engine", "jade");改成app.set("view engine", "jade");:app.set()是Express用来设置应用配置项的方法,视图引擎属于配置项,必须用该方法设置。 - 删除
module.exports = router;:代码里没创建router实例,这行代码不仅没用,还会引发router is not defined的额外错误。
内容的提问来源于stack exchange,提问作者Priti Surya
相关产品推荐
相关产品推荐

