You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的错误

两种修复方式选其一:

  1. 修改导入方式为默认导入
    将index.js中的导入代码改为:

    const userRouter = require('./routes/userRoutes')
    
  2. 修改导出方式为命名导出
    将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 11:57:26