Я пытаюсь повторно использовать мои контроллеры, которые обрабатывают операции с базами данных. Я немного борюсь с структурированием своего приложения. Вот что у меня есть:Как повторно использовать контроллеры базы данных
server.js
var apiController = require('./controllers/api');
router.get('/cars', function (req, res) {
// get all cars from DB and render view
apiController.getCars().then(function (cars) {
res.render('index', {cars: cars});
});
});
router.get('/api/cars', function (req, res) {
// get all cars from DB and return JSON
apiController.getCars().then(function (cars) {
res.json(cars);
});
});
Контроллеры/api.js
module.exports = {
getCars: function() {
db.collection('cars').find().toArray(function (err, cars) {
if (err) throw err;
return cars;
});
},
// tried also something like this but this doesn't really work
// for my use case because I don't want to attach any particular
// res to the function
getCars: function (req, res, next) {
db.collection('cars').find().toArray(function (err, cars) {
if (err) throw err;
res.json(cars);
});
},
};
Спасибо за ответ, вы правы, я ожидаю обещания в server.js, поэтому он не сработал. Является ли использование обещаний стандартным способом обработки DB-контроллера - отношения маршрутизатора в express? Я в основном ищу правильный шаблон, я не обязательно привязан к обещаниям. – finspin
Одним из недостатков этого подхода было бы то, что мне пришлось бы обрабатывать ошибки для getCars в каждом маршрутизаторе, не так ли? – finspin
Обратные вызовы - это старый способ обработки async в JavaScript. Обещает новое. Поэтому я предлагаю вам использовать обещания, если вы не будете слишком ужасно относиться к этому. –