res.render在节点中,控制器响应jade

时间:2015-12-01 10:35:31

标签: node.js pug sequelize.js

这是我模特的一部分

router.get('/subscription', function (req, res, next) {
    var membership = require('../controllers/membership.js');
   var jData = membership.getAll(req, res);
   res.render('subscription', { title: 'Subscription', data : jData });
});

这是我的controller.js

的一部分
var db = require('../db.js');

module.exports = {
    //home: function (req, res, next) {
    //    res.send('home page');
    //},
    insert: function (req, res) {
        var body = req.body; //_.pick(req.body, 'description', 'completed');

        db.membership.create(body).then(function (membership) {
            res.json(membership.toJSON());
        }, function (e) {
            res.status(500).json(e);
        });
    },
    updateById: function (req, res, next) {
        //var Id = parseInt(req.params.id, 10);
        var body = req.body;

        db.membership.update(body, { where: { id: parseInt(_.propertyOf(body)('id'), 10) } }).then(function (membership) {
            if (!!membership) {
                res.json(membership.toJSON());
            } else {
                res.status(404).send();
            }
        }, function (e) {
            res.status(500).json(e);
        });
    },
    deleteById: function (req, res, next) {
        //var Id = parseInt(req.params.id, 10);
        var body = req.body;

        db.membership.destroy({ where: { id: parseInt(_.propertyOf(body)('id'), 10) } }).then(function (membership) {
            if (!!membership) {
                console.log('The Row with the Id : ' + _.propertyOf(body)('id') + ' deleted successfully!');
            } else {
                res.status(404).send();
            }
        }, function (e) {
            res.status(500).json(e);
        });
    },
    deleteAll: function (req, res, next) {
        db.membership.truncate().then(function () {
            console.log('All rows deleted successfully!');
        }, function (e) {
            res.status(500).json(e);
        });
    },
    getById: function (req, res) {
        var Id = parseInt(req.params.id, 10);

        db.membership.findById(Id).then(function (membership) {
            if (!!membership) {
                console.log('\n\nMEMBERSHIP : ' + JSON.stringify(membership.toJSON()));
                res.json(membership.toJSON());
                //return membership.toJSON();
            } else {
                res.status(404).send();
            }
        }, function (e) {
            res.status(500).send();
        });

    },
    getAll: function (req, res) {

        var where = {};

        db.membership.findAll({
            where: where
        }).then(function (membership) {
            res.json(membership.toJSON());
        }, function (e) {
            res.status(500).send();
        });

    }
}; 

我试图在我的模型数据中得到完美的数据,因此在控制器中没有问题 但res.render函数数据无法传递给jade。 根据我的res.render函数调用jdata变量填充之前。 关于它的任何解决方案告诉我。 提前谢谢

1 个答案:

答案 0 :(得分:0)

你不能发送两次响应,如果你在控制器中发送res,你不能再在模型中发送它,你应该使用回调:

控制器:

getAll: function(cb) {
    var where = {};
    db.membership.findAll({
        where: where
    }).then(function(membership) {
        cb({
            data: membership.toJSON()
        });
    }, function(e) {
        cb({
            error: e
        });
    });
}

型号:

router.get('/subscription', function (req, res, next) {
    var membership = require('../controllers/membership.js');
    var jData = membership.getAll(function (cb) {
        if (cb.error) res.status(400).send();
        res.render('subscription', { title: 'Subscription', data : cb.data });
    });
});