在不调用Controller操作的情况下重用NodeJS中的视图

时间:2013-09-17 17:01:24

标签: node.js express

我在控制器中有2个操作,比如我有一个Projects“控制器”和两个操作:.all.my

  • all操作将检索数据库中的所有Project条记录 并呈现视图以在列表中显示它们。

  • my操作也会执行相同的操作,但只会显示这些项目 由当前用户创建的。

如何在我的操作中重复使用all视图,而不必复制my操作的视图?如果我在my操作中调用此代码:

        res.render('projects/all',
            projects : projects
        )

调用控制器中的all操作,覆盖我的projects数组。这在Rails中很常见,但在NodeJS中我无法弄清楚如何做到这一点。感谢。

编辑:

以下是我的操作的代码(我已经同时放弃并使用了两个单独的视图allmy具有相同的HTML生成代码:

exports.all = function(req, res) {
Project.all(req.db, function(err, projects) {

    var viewVars = {
        title: "All projects"
    };

    viewVars = req.db.paginate(req,
        viewVars
    );

    if(!err && projects != null)
    {
        viewVars.projects = projects;
        res.render('projects/all',
            viewVars
        )
    }
    else
    {
        viewVars.projects = [];
        viewVars.error_messages = ["No projects available"];
        res.render('projects/all',
            viewVars
        )
    }
});
};

exports.my = function(req, res) {
Project.findByCreator(req.db, req.session.user.uri, function(err, projects) {

    var viewVars = {
        //title: "My projects"
    };

    viewVars = req.db.paginate(req,
        viewVars
    );

    if(!err && projects != null)
    {
        viewVars.projects = projects;
        res.render('projects/my',
            viewVars
        )
    }
    else
    {
        viewVars.projects = [];
        viewVars.info_messages = ["You have not created any projects"];
        res.render('projects/my',
            viewVars
        );
    }
});
};

1 个答案:

答案 0 :(得分:1)

改变你的路线...

这样的东西
app.get("/projects/:option(all|my)", yourcontroller);

然后你可以使用

req.params.option

判断要加载哪些数据,并将该数据发送到您的新视图中。