Express框架Route.post()报错:需回调函数却获undefined求助
解决Express路由错误:Route.post() requires a callback function but got a [object Undefined]
错误信息
D:\server\node_modules\express\lib\router\route.js:216 throw new Error(msg); ^ Error: Route.post() requires a callback function but got a [object Undefined] at Route.<computed> [as post] (D:\server\node_modules\express\lib\router\route.js:216:15) at proto.<computed> [as post] (D:\server\node_modules\express\lib\router\index.js:521:19) at Object.<anonymous> (D:\server\routes\auth.js:8:8) at Module._compile (node:internal/modules/cjs/loader:1358:14) at Module._extensions..js (node:internal/modules/cjs/loader:1416:10) at Module.load (node:internal/modules/cjs/loader:1208:32) at Module._load (node:internal/modules/cjs/loader:1024:12) at Module.require (node:internal/modules/cjs/loader:1233:19) at require (node:internal/modules/helpers:179:18) at Object.<anonymous> (D:\server\routes\index.js:5:20) Node.js v20.14.0 [nodemon] app crashed - waiting for file changes before starting...
问题根源
错误集中在controller/auth.js文件,存在两处关键问题:
- 导出语法错误:最后一行的
module.export缺少末尾的s,正确写法是module.exports,此错误导致整个模块导出undefined,路由文件引入的控制器自然也是undefined。 - 函数名不匹配:文件内定义的控制器函数是
registerController和loginController,但导出时写的是regController和logController,名称完全不符,即便导出语法正确,也无法获取对应函数。
修正后的controller/auth.js代码
const { regService, logService } = require('../service/auth'); const registerController = async (req, res, next) => { const { name, email} = req.body; if (!name || !email) { // 补全原代码缺失的闭合括号 return res.status(400).json({ message: "Invalid Data" }) } try { const user = await regService({ name, email }) return res.status(200).json({ message: "User created successfully", user }) } catch (error) { next(error); } }; const loginController = async (req, res, next) => { const { email, password } = req.body try { const token = await logService({ email, password }); return res.status(200).json({ message: "Login Successfull", token }); } catch (e) { next(e); } }; // 修正导出语法与函数名对应关系 module.exports = { regController: registerController, logController: loginController };
另外补充了registerController中if条件缺失的闭合括号,避免后续出现语法错误。
内容的提问来源于stack exchange,提问作者President Jam
相关产品推荐
相关产品推荐

