nodejs:访问路由中的变量
nodejs: Access variables in routes
这是我的 routes.js
的样子:
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);
}
如你所见,这里有server
和db
两个变量。但是,我不确定如何将这两个变量传递给 deals.findAll
和其他 REST 方法。
下面是 deals.findAll
方法的样子:
const findAll = (req, res, next) => {
// I need to access db here, so I can use Sequelize.
}
exports.findAll = findAll
我需要数据库的原因是 Sequelize ORM。
您可以使用 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()
方法prepends那些参数,所以你需要修改那些函数的参数为:
const findAll = (server, db, req, res, next) => {
// server & db is set here
}
这是我的 routes.js
的样子:
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);
}
如你所见,这里有server
和db
两个变量。但是,我不确定如何将这两个变量传递给 deals.findAll
和其他 REST 方法。
下面是 deals.findAll
方法的样子:
const findAll = (req, res, next) => {
// I need to access db here, so I can use Sequelize.
}
exports.findAll = findAll
我需要数据库的原因是 Sequelize ORM。
您可以使用 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()
方法prepends那些参数,所以你需要修改那些函数的参数为:
const findAll = (server, db, req, res, next) => {
// server & db is set here
}