Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在req vs res中存储数据_Javascript_Node.js_Express_Sails.js - Fatal编程技术网

Javascript 在req vs res中存储数据

Javascript 在req vs res中存储数据,javascript,node.js,express,sails.js,Javascript,Node.js,Express,Sails.js,我有一个中间件(在sails.js中,一个基于express的框架),它在数据库中查找某些内容,然后将其存储在对象中,这样我就可以在布局/控制器中使用它 目前,我将其存储在req对象中,如下所示: req.someStuff = 'Some stuff'; 然而,我刚刚读到,你也可以这样做: res.locals.someStuff = 'Some stuff'; 有什么区别?两者都设法完成相同的任务。谢谢。请参阅 基本上,您将res.locals传递给渲染引擎(假设您正在使用jade、ej

我有一个中间件(在sails.js中,一个基于express的框架),它在数据库中查找某些内容,然后将其存储在对象中,这样我就可以在布局/控制器中使用它

目前,我将其存储在
req
对象中,如下所示:

req.someStuff = 'Some stuff';
然而,我刚刚读到,你也可以这样做:

res.locals.someStuff = 'Some stuff';
有什么区别?两者都设法完成相同的任务。谢谢。

请参阅

基本上,您将res.locals传递给渲染引擎(假设您正在使用jade、ejs等)。当它呈现时,它将对全局范围可用,因此您可以按命名方式调用它们(即
someStuff
,而不是
locals.someStuff

因此,res.someStuff在渲染时不可用于全局范围,因此无法通过您使用的任何渲染模板访问(即不能称为
someStuff

简而言之,它只是提供了一种简单的方法,可以将某些内容传递给渲染模板,并使其可以被全局范围访问

例如(使用ejs)如下

<% if(someStuff) { ... } %>

<!-- or even this -->
<% if(locals.someStuff) { ... } %>

编辑-
我还刚刚意识到你正在发布请求.something vsres.something。您可以通读这些相同的文档以查看它们之间的差异,但基本上一个是传入请求对象,另一个是传出响应对象。(这是http so请求-响应协议)

哦,好吧,res.locals只为布局提供方便的变量名。但是输入req.something并不是一件很麻烦的事。我想可能会有更大的区别。我想最好还是坚持req,如果你也在控制器中使用它的话。是的,我已经意识到req代表请求,res代表响应,谢谢。是的,我想你大概知道,但是你说的有点不正确。如果您传递类似funcName(req,resp){..}的内容并继续传递req,resp,当然您可以访问这两个对象(比如从控制器到服务层等等)。但是resp是在页面呈现时被称为/使用的。它接受响应对象上的任何内容,并使其在模板文件中可用。请求。我想说的不是(它来自http请求传入数据上的任何内容),而是req和resp在本地字段上有根本的不同。局部变量只是将某些内容绑定到特定范围的一种简单方法(res.locals-全局视图内模板,app.locals-作用于整个express应用程序)。如果回答了您的问题,请确保将其标记为已完成。