如何在 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