运行npm start时遇Route.post()回调未定义错误求助
解决
Route.post() requires a callback function but got a [object Undefined] 错误 这个错误的核心原因很明确:你在app.post('/api/actions',db.validateAction, db.createAction)里传入的db.validateAction或db.createAction其中一个(甚至两个)是undefined——也就是说你的代码没正确拿到这两个函数。下面一步步排查解决:
1. 先检查 queries.js 的函数导出
这是最常见的问题:你定义了函数,但忘了把它们导出给外部文件使用。
确保在queries.js文件末尾,把两个函数通过module.exports暴露出去:
// queries.js 文件末尾 function validateAction(req, res, next) { // 你的完整函数代码 req.checkBody('dateDone', 'Invalid date').notEmpty(); req.checkBody('completed', 'Invalid completed value').isBoolean(); var errors = req.validationErrors(); if (errors) { var response = { errors: [] }; // 补全errors的处理逻辑,比如遍历错误信息 errors.forEach(err => response.errors.push(err.msg)); return res.status(400).json(response); } // 必须调用next(),不然请求会挂起 next(); } function createAction(req, res) { // 你的createAction逻辑 } // 关键:导出两个函数 module.exports = { validateAction, createAction };
如果你的项目支持ES6模块语法,也可以用export写法:
export { validateAction, createAction };
2. 确认 index.js 的导入路径正确
你在index.js里导入queries.js的路径必须和文件实际位置匹配,不然导入的db对象会是空的。
比如如果queries.js和index.js在同一目录下,导入代码应该是:
const db = require('./queries');
如果queries.js在/db子目录里,就要写成:
const db = require('./db/queries');
3. 检查 validateAction 函数的语法完整性
你贴的代码里validateAction函数是不完整的(第34行是errors...),如果函数没有正确闭合(比如缺了})或者逻辑没写完,会导致函数定义失败,最终变成undefined。一定要确保函数是完整可执行的,尤其是不要漏掉next()调用——这是中间件必须做的事,否则请求会卡在这个环节。
4. 临时调试验证
可以在index.js里加一行日志,看看导入的db对象到底有什么:
const db = require('./queries'); console.log('db对象内容:', db); // 运行npm start后看控制台输出
如果输出里没有validateAction和createAction,那肯定是导出/导入环节出了问题,回到前两步排查。
内容的提问来源于stack exchange,提问作者user9449018
相关产品推荐
相关产品推荐

