Jawaban yang Diperbarui:05/02/15
Jika Anda ingin melampirkan koneksi DB ke setiap objek permintaan, kemudian menggunakan koneksi itu di layanan Anda, koneksi harus diteruskan ke myService
bagaimanapun. Contoh di bawah ini menunjukkan salah satu cara untuk melakukannya. Jika kita mencoba menggunakan db.current
atau sesuatu seperti itu, kami akan menyimpan status dalam modul DB kami. Dalam pengalaman saya, itu akan menyebabkan masalah.
Atau, saya memaparkan pendekatan yang saya gunakan (dan masih digunakan) di jawaban sebelumnya ini . Apa artinya ini untuk contoh ini adalah sebagai berikut:
// api.js
var MyService = require(./services/MyService')
...
router.get('/foo/:id?', function (req, res) {
MyService.performTask(req.params.id);
});
// MyService.js
var db = require('db');
module.exports = {
performTask: function(id)
{
var connection = db.getOpenConnection();
// Do whatever you want with the connection.
}
}
Dengan pendekatan ini, kami telah memisahkan modul DB dari modul api/app/router dan hanya modul yang benar-benar menggunakannya yang akan mengetahui keberadaannya.
Jawaban Sebelumnya:05/01/15
Apa yang Anda bicarakan dapat dilakukan dengan menggunakan middleware ekspres. Berikut tampilannya:
var db = require('db');
// Attach a DB connection to each request coming in
router.use(req, res, next){
req.locals.db = db.getOpenConnection();
next();
}
// Later on..
router.get('/foo/:id?', function (req, res) {
// We should now have something attached to res.locals.db!
var service = new MyService(res.locals.db);
});
Saya pribadi belum pernah melihat sesuatu seperti new MyService
sebelumnya dalam aplikasi ekspres. Itu tidak berarti itu tidak bisa dilakukan, tetapi Anda dapat mempertimbangkan pendekatan seperti ini
// router.js
var MyService = require('MyService');
router.get('/foo/:id?', function (req, res) {
MyService.foo(res.locals.db);
});
// MyService.js
module.exports.foo(connection){
// I have a connection!
}