为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

宝慕林4294392 2022-06-05 10:35:31
我一直在为 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 )                    }    });
查看完整描述

2 回答

?
慕田峪9158850

TA贡献1794条经验 获得超8个赞

该对象是一个对象字面量。出于您提供的示例的目的,有两种可能的方法可以在内部传递对象res.render


{ 对象 }

const obj = req.body

res.render('success',{obj})

{ obj : obj } // 就像你已经拥有它一样

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


您必须知道传递给响应的对象res.render在此响应的范围内已经是全局可访问的。


如果您有不符合此要求的要求,可以扩展res.locals


res.locals(属性)

来自Express Docs 4.x API


范围为请求,仅可用于在该请求/响应周期(如果有)期间呈现的视图。


app.use(function (req, res, next) {

  res.locals.user = req.user

  res.locals.authenticated = !req.user.anonymous

  next()

})


查看完整回答
反对 回复 2022-06-05
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

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


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


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


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

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


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


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


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


查看完整回答
反对 回复 2022-06-05
  • 2 回答
  • 0 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号