データベース操作を処理するコントローラを再利用しようとしています。私は自分のアプリケーションを構造化するのに苦労しています。ここで私が持っているものだ:/データベースコントローラを再利用する方法
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);
});
});
コントローラ
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で非同期を処理する古い方法です。新しいことを約束します。だから私はあなたがそれについてあまりにもひどく感じないなら、約束を使用することをお勧めします。 –