2017-10-22 144 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