我想重用我的控制器來處理數據庫操作。我有點困難於構建我的應用程序。下面是我有:如何重用數據庫控制器
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控制器 - 路由器關係中的表達?我基本上在尋找正確的模式,我不一定會遵守承諾。 – finspin
這種方法的一個缺點是我不得不在每個路由器上對getCars進行錯誤處理,對吧? – finspin
回調是在JavaScript中處理異步的舊方法。承諾新的。所以我建議你使用Promise,如果你不覺得太緊張的話。 –