使用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;
我正在访问其他文件中暴露的User
variables。
不过,我根据文档更改了这个文件:
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; });
但是, User
variables现在在另一个文件中是未定义的。
为什么是这样,我怎么把User
variables暴露给其他文件?
我不知道你看过哪些文档,但我不认为这是一个组织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); }); };