如何在 ExpressJS 的多路由器设置中传递 DB 对象?
How to pass DB object in multi router setting in ExpressJS?
我想像 ExpressJS Doc 中的示例一样进行多个路由器设置。
我有 index.js , api1 , api2 如下所示。
如何将 db 对象从 index.js 传递到 api1 和 api2?
我试试
app.use('/api/v1', require('./controllers/api_v1')(db));
但显示错误:Router.use() requires a middleware function but got a Object
index.js:
var express = require('../..');
const knex = require('knex');
const config = require('./config');
var app = module.exports = express();
const db = knex(config.db);
app.use('/api/v1', require('./controllers/api_v1'));
app.use('/api/v2', require('./controllers/api_v2'));
app.get('/', function(req, res) {
res.send('Hello from root route.')
});
/* istanbul ignore next */
if (!module.parent) {
app.listen(3000);
console.log('Express started on port 3000');
}
api_v1.js
var express = require('../../..');
var apiv1 = express.Router();
apiv1.get('/', function(req, res) {
res.send('Hello from APIv1 root route.');
});
apiv1.get('/users', function(req, res) {
res.send('List of APIv1 users.');
});
module.exports = apiv1;
api_v2.js
var express = require('../../..');
var apiv2 = express.Router();
apiv2.get('/', function(req, res) {
res.send('Hello from APIv2 root route.');
});
apiv2.get('/users', function(req, res) {
res.send('List of APIv2 users.');
});
module.exports = apiv2;
您可以从 database.js 文件导出 db 对象并在 index.js 文件以及您需要数据库访问的所有其他文件中需要它。或者,更简单但更丑陋的方法是通过 global.db = db
使变量成为全局变量。然后,您可以在 Node.JS 应用程序的任何地方使用 db
。
我想像 ExpressJS Doc 中的示例一样进行多个路由器设置。 我有 index.js , api1 , api2 如下所示。 如何将 db 对象从 index.js 传递到 api1 和 api2?
我试试
app.use('/api/v1', require('./controllers/api_v1')(db));
但显示错误:Router.use() requires a middleware function but got a Object
index.js:
var express = require('../..');
const knex = require('knex');
const config = require('./config');
var app = module.exports = express();
const db = knex(config.db);
app.use('/api/v1', require('./controllers/api_v1'));
app.use('/api/v2', require('./controllers/api_v2'));
app.get('/', function(req, res) {
res.send('Hello from root route.')
});
/* istanbul ignore next */
if (!module.parent) {
app.listen(3000);
console.log('Express started on port 3000');
}
api_v1.js
var express = require('../../..');
var apiv1 = express.Router();
apiv1.get('/', function(req, res) {
res.send('Hello from APIv1 root route.');
});
apiv1.get('/users', function(req, res) {
res.send('List of APIv1 users.');
});
module.exports = apiv1;
api_v2.js
var express = require('../../..');
var apiv2 = express.Router();
apiv2.get('/', function(req, res) {
res.send('Hello from APIv2 root route.');
});
apiv2.get('/users', function(req, res) {
res.send('List of APIv2 users.');
});
module.exports = apiv2;
您可以从 database.js 文件导出 db 对象并在 index.js 文件以及您需要数据库访问的所有其他文件中需要它。或者,更简单但更丑陋的方法是通过 global.db = db
使变量成为全局变量。然后,您可以在 Node.JS 应用程序的任何地方使用 db
。