Express.js将模型,视图和控制器分开

时间:2017-03-08 21:31:56

标签: node.js mongodb express

我使用Express.js相当新,但是已经编写了一些应用程序。我总是最终连接到我的app.js文件中的数据库,并将db连接附加到每个请求对象,如下所示:

var mongo = require('mongodb');
var monk  = require('monk');
var db    = monk('localhost:27017/db');

app.use( function(req,res,next) {
    req.db = db;
    next();
});

然后,在我的路径文件中,我将执行以下操作:

var express = require('express');
var router  = express.Router();

router.get('/', function(req,res,next) {

    var db = req.db;
    var person = db.get('person');

    person.find( {}, {}, function(err, docs) {
        if ( err ) { console.log("error"); }

        res.status(200);
        res.send(JSON.stringify(docs));
        res.end();
    });
});

但是,我正在浏览一个我创建的旧应用程序,我想将模型与路径文件分开。例如,继续上面的例子,我希望能够做到这样的事情:

var person = require('./person-model');

router.get('/', function(req,res,next) {
    var list = person.get();

    res.status(200);
    res.send(JSON.stringify(list);
    res.end();
});

执行此方法的最佳方法是什么?我应该从模型中返回一个承诺吗?

1 个答案:

答案 0 :(得分:0)

您可以提取文件的所有模型部分,并在项目结构中有意义的地方将它们放入新文件中。然后,无论您需要使用哪种方法,都可以放置一个与module.exports结合使用的对象。例如,如果您只想导出db,只需将module.exports设置为db对象即可。

var mongo = require('mongodb');
var monk  = require('monk');
var db    = monk('localhost:27017/db');

module.exports = db;

然后,在您的路线文件中,您可以执行以下操作:

var person = require("./models/person-model.js");

router.get('/', function(req,res,next) {
    var list = person.get();

    res.status(200);
    res.send(JSON.stringify(list);
    res.end();
});