2014-01-19 1 views
2

У меня есть user.js файл:с использованием экспорта внутри db.open() обратного вызова - мангуст/экспресс

var mongoose = require('mongoose'); 
mongoose.connect('mongodb://localhost/dbName'); 

var User = mongoose.model('user', { username: String, password: String }); 

exports.User = User; 

Я доступ к открытой User переменной в других файлах.

Однако, я изменил файл с этим согласно документации:

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 является Undefine сейчас в другом файле.

Почему это так и как я могу представить переменную User в другие файлы?

ответ

3

Я не знаю, на какую документацию вы смотрели, но я не думаю, что это хороший способ организовать схему 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); 

модели/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); 

маршруты/users.js:

var user = require('../models/user.js'); 

exports.list = function(req, res) { 
    user.find(function(err, users) { 
     res.send(users); 
    }); 
}; 
+0

Я смотрел на это: http: //mongoosejs.com/docs/index.html. В нем говорится: «Давайте предположим, что весь следующий код находится внутри этого обратного вызова», а затем определяет схему. – Jatin

+0

Именно на примере, чтобы проиллюстрировать концепцию, я не думаю, что это целесообразно сделать в реальном приложении. –

Смежные вопросы