Я пытаюсь отделить код маршрута от кодов базы данных, но застрял с ошибкой, когда маршрут вызывает метод контроллера.
У меня есть 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
Выполнение не выполняетсяt ожидание controller.getAll(criteria)
.
Я пробовал некоторые коды, которые я нашел, ища похожие вопросы, такие как try / catch асинхронный вызов, но не работает, или я пропустил некоторые детали.
Заранее спасибо.