Express4。 app.locals,res.locals和req.app.locals之间有什么区别?

时间:2016-01-31 06:43:12

标签: javascript node.js express

使用express 4时我很困惑。我使用 express-generator 来生成我的项目。根目录中有 app.js ,路由器文件中有 index.js 。但是,关于快递的互联网教程正在 app.js 中直接使用路由器。因此,当我想在 index.js (在路由器文件中)中设置一些变量时,我使用app.locals,但它不起作用。但是当我改为另外两个时,我的ejs模板起作用......我很困惑。有人可以告诉我它们之间的区别以及如何正确使用吗?

<xsl:template match="para">
    <xsl:copy>
        <xsl:value-of select="replace(.,',(\S)',',&#160;$1')"/>
    </xsl:copy>
</xsl:template>

2 个答案:

答案 0 :(得分:18)

  • app.locals对象是一个JavaScript对象,其属性是应用程序中的局部变量。

    app.locals.title
    // => 'My App' 
    app.locals.email
    // => 'me@myapp.com'
    

    设置后,app.locals属性的值在应用程序的整个生命周期中都会持续

  • 与仅在请求生命周期内有效的res.locals属性形成对比。当您处理拥有res对象的路线时,您不会在那里拥有应用对象,反之亦然app.locals

  • 您可以访问应用程序中呈现的模板中的局部变量。这对于为模板提供辅助函数以及应用程序级数据非常有用。通过req.app.locals(参见req.app

    在中间件中提供本地人员
    app.locals.title = 'My App';
    app.locals.strftime = require('strftime');
    app.locals.email = 'me@myapp.com';
    

Node.js In Action本书中的一张图片如下所示,描述app.localres.local的差异

enter image description here

答案 1 :(得分:3)

来自express documentation

简而言之。

<强> app.locals

app.locals对象是一个JavaScript对象,其属性是应用程序中的局部变量。

这意味着您可以在app.js中使用locals声明变量,并在该脚本中访问该变量或将其传递给response object

<强> res.locals

使用此功能,您可以将变量设置或发送到客户端html / view,并且只能在该视图/ html中使用。

e.g。

app.get('/view', function(req, res) {
  res.locals.user = req.user;
});

此处{h}页面中提供user变量,请求view路线。

<强> req.app.locals

通过req.app.locals;

在中间件中提供本地人员