调用跨文件函数后出现TypeError: Cannot read property 'status' of undefined错误求助
错误排查:TypeError: Cannot read property 'status' of undefined
错误原因
- 函数调用方式错误:你在server.js中直接执行
chkMaintenanceMode(),但该函数作为Express中间件,需要接收req、res、next三个参数,手动调用时未传递任何参数,导致res为undefined,访问res.status自然抛出错误。 - 函数内部逻辑缺陷:错误处理不规范,遇到数据库查询错误时直接
return false,未将错误传递给Express的错误处理机制;同时未处理result不存在的场景,会导致请求无响应挂起。
解决方案
1. 修正函数调用方式
该函数是Express中间件,需绑定到路由上,由Express在处理请求时自动传入参数,而非直接执行。修改server.js中的调用代码:
const { chkMaintenanceMode } = require('./maintenance.js'); // 将中间件绑定到指定路由,示例为GET请求的/check-maintenance路径 app.get('/check-maintenance', chkMaintenanceMode);
2. 完善函数内部逻辑
修正错误处理和无结果场景的响应:
exports.chkMaintenanceMode = function (req, res, next) { Configuration.findOne({meta_group: 'maintenance_mode'}).exec(function (err, result) { if(err) { // 将错误传递给Express错误处理中间件 return next(err); } if(result){ console.log("result", result) return res.status(200).json({ data: result, reply: "", meta: req.phoneMeta }); } // 处理未找到配置的情况,返回404响应 return res.status(404).json({ data: null, reply: "Maintenance mode configuration not found", meta: req.phoneMeta }); }); };
内容的提问来源于stack exchange,提问作者Jaya Kumari
相关产品推荐
相关产品推荐

