export mongo数据库连接到models.js文件

时间:2016-02-08 11:36:39

标签: javascript node.js mongodb mongoose

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函数,因为我必须建立两个数据库连接。

2 个答案:

答案 0 :(得分:1)

您不应该在模块中需要app.js。这违背了目的。使用一个处理连接的单独模块,或使用依赖注入:

models.js

var mongoose = require('mongoose');

module.exports = function(conn) { // inject connection
    return {
        User: conn.model('User', new mongoose.Schema({
            username: String,
            password: String,
        })
    };
}

app.js

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');