Express导入路由报错:TypeError: Router.use()需中间件函数却获undefined
问题:Express路由导入时触发"Router.use() requires a middleware function but got a undefined"错误
我编写了处理用户路径的路由并导出给index.js使用,但在index.js中使用userRouter时出现如下错误:
C:\Users\yugi\OneDrive\Documents\codes\NodeJs\API_nodejs\node_modules\express\lib\router\index.js:469 throw new TypeError('Router.use() requires a middleware function but got a ' + gettype(fn)) ^ TypeError: Router.use() requires a middleware function but got a undefined at Function.use (C:\Users\yugi\OneDrive\Documents\codes\NodeJs\API_nodejs\node_modules\express\lib\router\index.js:469:13) at Function.<anonymous> (C:\Users\yugi\OneDrive\Documents\codes\NodeJs\API_nodejs\node_modules\express\lib\application.js:227:21) at Array.forEach (<anonymous>) at Function.use (C:\Users\yugi\OneDrive\Documents\codes\NodeJs\API_nodejs\node_modules\express\lib\application.js:224:7) at Object.<anonymous> (C:\Users\yugi\OneDrive\Documents\codes\NodeJs\API_nodejs\index.js:22:5)
但当我改用以下对象形式导出时,一切正常:
module.exports = { userRouter:router }
我已经移除了routes目录中另一个处理API路径的路由文件,但错误仍存在。以下是相关代码:
用户路由文件(userRoutes.js)
const express = require('express'); const router = express.Router(); const { getAllUsers, createNewUser, getUserById, updateUserData, deleteUser } = require('../controllers/userController') router.use(express.json()) router.use(express.urlencoded({ extended: false })) router.route('/') .get(getAllUsers) .post(createNewUser) router.route('/:id') .get(getUserById) .patch(updateUserData) .delete(deleteUser) module.exports = router
主文件(index.js)
//imported files require('dotenv').config() const express = require('express'); const { getConnection } = require('./connection') const app = express(); const PORT = process.env.PORT || 8080 const { userRouter } = require('./routes/userRoutes') //connection try { getConnection console.log('connected to db'); } catch (error) { console.log(error) } //middleware // console.log(apiRouter) app.use("/users", userRouter); //listening app.listen(PORT, () => { console.log(`server started on http://localhost:${PORT}`) })
解决方案
核心问题:导入导出方式不匹配
- 你的路由文件用的是默认导出:
module.exports = router - 但主文件中用的是解构赋值导入命名导出:
const { userRouter } = require('./routes/userRoutes'),这会导致userRouter为undefined,进而触发Express的错误
两种修复方式选其一:
修改导入方式为默认导入
将index.js中的导入代码改为:const userRouter = require('./routes/userRoutes')修改导出方式为命名导出
将userRoutes.js中的导出代码改为你测试有效的形式:module.exports = { userRouter: router }
额外提示
你的数据库连接代码只是引用了getConnection函数,没有实际调用,需要改成getConnection()才能真正执行连接逻辑:
try { getConnection() // 添加()调用函数 console.log('connected to db'); } catch (error) { console.log(error) }
内容的提问来源于stack exchange,提问作者M S Yugandhar
相关产品推荐
相关产品推荐

