【发布时间】:2019-03-25 07:55:02
【问题描述】:
我正在尝试将路由代码与数据库代码分开,但是当路由调用控制器方法时出现错误。
我有 productRoutes.js:
router.route('/')
.get(async (req, res, next) => {
try {
let criteria = {};
for (const el in req.query) {
criteria[el] = req.query[el];
}
console.log('Getting all products', criteria);
const result = await controller.getAll(criteria);
console.log('router result:', result);
const status = (result.ok ? (result.count > 0 ? 200 : 404 ) : 400);
return res.status(status).send(result);
} catch (err) {
return next(err);
}
});
productController.js:
exports.getAll = (criteria) => {
model.find(criteria, '-__v').exec((err, records) => {
const ok = (err ? false : true);
let result = {}
result.ok = ok;
if (ok) {
result.data = records;
result.count = records.length;
} else {
result.count = 0;
result.err = err;
}
console.log('controller result count:', result.count);
return result;
});
}
执行时会产生这个:
Getting all products {}
router result: undefined
TypeError: Cannot read property 'ok' of undefined
at router.route.post.get (C:\dev\projects\mercante\server\routes\productRoutes.js:58:36)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
controller result count: 4
执行不等待controller.getAll(criteria)。
我尝试了一些寻找类似问题的代码,例如尝试/捕获异步调用,但没有成功,或者我错过了一些细节。
提前致谢。
【问题讨论】:
标签: node.js express controller routes async-await