2017-10-22 136 views
0

這裏是我的routes.js看起來像:的NodeJS:在路由訪問變量

module.exports = function (server, db) { 

    // Deals 
    const deals = require('./controllers/deals'); 
    server.get('/deals', deals.findAll); 
    server.get('/deals/:id', deals.findById); 
    server.post('/deals', deals.add); 
    server.put('/deals/:id', deals.update); 
    server.del('/deals/:id', deals.delete); 

} 

正如你所看到的,這裏有serverdb變量。但是,我不確定如何將這兩個變量傳遞給deals.findAll以及其他REST方法。

這裏是deals.findAll方法的樣子:

const findAll = (req, res, next) => { 
    // I need to access db here, so I can use Sequelize. 
} 

exports.findAll = findAll 

的原因,我需要db是Sequelize ORM。

回答

2

您可以使用Function.prototype.bind()做到這一點:

module.exports = function (server, db) { 

    // Deals 
    const deals = require('./controllers/deals'); 
    server.get('/deals', deals.findAll.bind(null, server, db)); 
    server.get('/deals/:id', deals.findById.bind(null, server, db)); 
    server.post('/deals', deals.add.bind(null, server, db)); 
    server.put('/deals/:id', deals.update.bind(null, server, db)); 
    server.del('/deals/:id', deals.delete.bind(null, server, db)); 
} 

Function.prototype.bind()方法預規劃這些參數,所以你需要修改這些函數的參數:

const findAll = (server, db, req, res, next) => { 
    // server & db is set here 
} 
+0

偉大的作品!謝謝。 – Nedim