使用db.open()内的导出callback – mongoose / express

我有一个user.js文件:

 var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/dbName'); var User = mongoose.model('user', { username: String, password: String }); exports.User = User; 

我正在访问其他文件中暴露的Uservariables。

不过,我根据文档更改了这个文件:

 var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/dbName'); var db = mongoose.connection; db.on('error', console.error.bind(console, 'connection error:')); db.once('open', function callback () { console.log('connection open'); var Schema = mongoose.Schema; var User = mongoose.model('user', { username: String, password: String }); exports.User = User; }); 

但是, Uservariables现在在另一个文件中是未定义的。

为什么是这样,我怎么把Uservariables暴露给其他文件?

我不知道你看过哪些文档,但我不认为这是一个组织Mongoose模式的好方法。 在单独的文件中定义模式然后导出该文件可能会更好。 这里是一个例子:

app.js

 var express = require('express'); var app = express(); app.configure(function () { app.use(express.logger('dev')); app.use(express.bodyParser()); }); var mongoose = require('mongoose'); mongoose.connect('mongodb:mongoURI'); var db = mongoose.connection; var userModel = require('../models/user.js'); db.on('error', console.error.bind(console, 'connection error:')); db.once('open', function callback () { // Use userModel ... }); var userRoute = require('./routes/users'); app.get('/users/list', userRoute.list); app.listen(3000); 

models / user.js

 var mongoose = require('mongoose') ,Schema = mongoose.Schema ,ObjectId = Schema.ObjectId; var userSchema = new Schema({ id : ObjectId, name : {type : String, default : ''}, email : {type : String, default : ''} }); module.exports = mongoose.model('User', userSchema); 

routes / users.js

 var user = require('../models/user.js'); exports.list = function(req, res) { user.find(function(err, users) { res.send(users); }); };