用express.Router()表示4路由器,如何获得全局数据库连接?

如何可以在一个文件传递一个全局variables在一个文件模块? 我试图用一个数据库variables是一个数据库mongo connection.I复制文件的内容,我试图做的连接,但没有工作,没有在控制台中的错误; 只是在我的浏览器得到错误500。

app.js

var express = require('express'); var accounts = require('./routes/accounts'); var app = express(); app.set('port', process.env.PORT || 3000); app.use('/accounts', accounts); app.use(function(req, res) { res.type('text/plain'); res.status(404); res.send('404 - Not Found'); }); // custom 500 page app.use(function(err, req, res, next) { console.error(err.stack); res.type('text/plain'); res.status(500); res.send('500 - Server Error'); }); var mongoUtil = require( './mongoUtil'); mongoUtil.connectToServer( function( err ) { app.listen(app.get('port') , function() { console.log('Express started in ' + app.get('env') + ' mode on http://localhost:' + app.get('port') + '; press Ctrl-C to terminate.'); }); } ); 

mongoUtils.js

 var MongoClient = require( 'mongodb' ).MongoClient; const assert = require('assert'); var dbclass = module.exports = { db : null, connectToServer: function( callback ) { var url = 'mongodb://localhost:27017/crm1'; MongoClient.connect(url, function(err, db) { if(err) throw err; console.log("Connected successfully to server"); dbclass.db = db; }); }, getDb: function() { return dbclass.db; } }; 

/router/accounts.js

 var express = require('express'); var router = express.Router(); var db = .... ??? ; router.get('/', function(req, res) { findDocuments(db, function() { db.close(); }); }); router.post('/', function(req, res) { res.send('POST handler for /dogs route.'); }); var findDocuments = function(db, callback) { // Get the documents collection var collection = db.collection('accounts'); // Find some documents collection.find().toArray(function(err, docs) { console.log("Found the following records"); console.log(docs); callback(docs); }); } module.exports = router; 

一个工作,而不是可怕的方式做到这一点是不直接导出路由器,而是一个发电机。 生成器可能有多种语法,我已经select向您展示一个使用与您在MongoUtils使用的模式相似的模式的MongoUtils

app.js:

 var express = require('express'); var app = express(); app.set('port', process.env.PORT || 3000); var mongoUtil = require( './mongoUtil'); mongoUtil.connectToServer( function( err ) { var accounts = require('./routes/accounts'); accounts.init(mongoUtils.getDb()); app.use('/accounts', accounts.getRouter()); app.use(function(req, res) { res.type('text/plain'); res.status(404); res.send('404 - Not Found'); }); // custom 500 page app.use(function(err, req, res, next) { console.error(err.stack); res.type('text/plain'); res.status(500); res.send('500 - Server Error'); }); app.listen(app.get('port') , function() { console.log('Express started in ' + app.get('env') + ' mode on http://localhost:' + app.get('port') + '; press Ctrl-C to terminate.'); }); } ); 

/router/accouts.js:

 var express = require('express'); var router = express.Router(); function init(db) { router.get('/', function(req, res) { findDocuments(db, function() { db.close(); }); }); router.post('/', function(req, res) { res.send('POST handler for /dogs route.'); }); var findDocuments = function(db, callback) { // Get the documents collection var collection = db.collection('accounts'); // Find some documents collection.find().toArray(function(err, docs) { console.log("Found the following records"); console.log(docs); callback(docs); }); } } function getRouter() { return router; } module.exports = { init: init, getRouter: getRouter }; 

我已经重写了@DrakaSAN想法之后的代码; 我的代码有错误,我改变了方式:

app.js

 let express = require('express'); let app = express(); app.set('port', process.env.PORT || 3000); let dbMongo = require( './db/dbMongoNative'); dbMongo.init ( function( error ) { if (error) console.error(error); let accounts = require('./routesMongoNative/accounts'); accounts.init(); app.use('/accounts', accounts.getRouter()); app.get('/',function(req, res) { res.send('hello'); }); app.use(function(req, res) { res.type('text/plain'); res.status(404); res.send('404 - Not Found'); }); // custom 500 page app.use(function(err, req, res, next) { console.error(err.stack); res.type('text/plain'); res.status(500); res.send('500 - Server Error'); }); app.listen(app.get('port') , function() { console.log('Express started in ' + app.get('env') + ' mode on http://localhost:' + app.get('port') + '; press Ctrl-C to terminate.'); }); } ); 

/db/dbMongoNative.js

 var MongoClient = require( 'mongodb' ).MongoClient; module.exports.init = function (callback) { var url = 'mongodb://localhost:27017/crm1'; MongoClient.connect(url, function (error, db) { if (error) { console.error(error); } console.log("Connected successfully to server"); module.exports.db = db; console.log('end connect'); callback (error); }); }; 

/routesMongoNative/accounts.js

 var express = require('express'); var router = express.Router(); var dbMongo = require( '../db/dbMongoNative' ); let db = dbMongo.db; // connection was done before in app let findAll = function(res, db ) { db.collection('accounts').find( {}).toArray( function( error, result ) { if (error) throw error; res.json(result); }); }; function init() { router.get('/', function(req, res) { findAll(res, db ); }); } function getRouter() { return router; } module.exports = { init: init, getRouter: getRouter };