首页 > 解决方案 > res.render 传递的对象,它们叫什么?

问题描述

我一直在为 res.render 中的这些对象苦苦挣扎,我如何在全局范围内或以某种方式在 res.render 之外定义它们?我希望有办法做到这一点..这是一个例子:

router.get("/home/blog", function(req,res){
    Sandwich.find({}, function(err,posts){
        if(err){
            console.log(err);         
        } else {          
                res.render("blog", {posts:posts} <--------- These )            
        }
    });

标签: javascriptnode.jsexpressbody-parser

解决方案


res.render 传递的对象,它们叫什么?

它只是传递给模板渲染器的参数。文档将其res.render()称为“本地对象”。这是文档显示的内容”

res.render(view [, locals] [, callback])

locals, an object whose properties define local variables for the view.

我如何在全球范围内或以某种方式在 res.render 之外定义它们?

您通常不会全局定义它们,因为您呈现的每个模板都应该有一组独特的数据,用于呈现页面。如果您的模板的某些部分对于您服务器上的每个用户来说实际上都是相同的,您可以创建一个共享对象(不是全局),将其导入任何路由文件,然后将该共享对象放入您的本地对象您作为属性传递给渲染器。不建议将全局变量用于这种用途。

在您显示的特定路线中,您不能将帖子放入全局甚至共享对象,因为当人们添加/删除帖子时,该全局或共享对象不会得到更新。

仅供参考,当您在查询数据库时遇到错误时,您仍然需要发送对请求的响应,可能是 5xx 状态响应或呈现错误页面。


推荐阅读