app.js文件:
var express = require('express');
var path = require('path');
var mongoose = require('mongoose');
var bodyparser = require('body-parser');
var conn = mongoose.createConnection('mongodb://localhost/database_name');
var app = express();
app.set('view engine','ejs');
app.set('views', path.join(__dirname, 'views'));
app.use(express.static(path.join(__dirname, 'public')));
app.use(bodyparser.urlencoded({extended:true}));
app.use(require('./routes/index'));
app.use(require('./routes/page1'));
app.use(require('./routes/page2'));
app.use(require('./routes/page3'));
app.use(require('./routes/page4'));
exports.conn = conn;
app.listen(3000,function(request, response){
console.log("Server is running at Port 3000");
});
models.js文件:
var mongoose = require('mongoose');
var app = require('./app');
var conn = app.conn
module.exports.User = conn.model('User', new mongoose.Schema({
username: String,
password: String,
}));
在运行node app.js
时,我收到 TypeError: Cannot read property 'model' of undefined
的错误消息。
app.js和models.js在同一个文件夹中。
P.S。我正在使用createConnection函数,因为我必须建立两个数据库连接。
答案 0 :(得分:1)
您不应该在模块中需要app.js
。这违背了目的。使用一个处理连接的单独模块,或使用依赖注入:
var mongoose = require('mongoose');
module.exports = function(conn) { // inject connection
return {
User: conn.model('User', new mongoose.Schema({
username: String,
password: String,
})
};
}
var conn = mongoose.createConnection('mongodb://localhost/database_name');
var models = require('./models')(conn);
models.User(...) // do stuff with User function
由于可以为conn
注入模拟,因此结构更好,更易于维护且更易于测试。
答案 1 :(得分:0)
终于明白了:
要使其全局可用,我们需要替换以下行
var conn = mongoose.createConnection('mongodb://localhost/database_name');
与
module.exports.conn = mongoose.createConnection('mongodb://localhost/database_name');