Nodejs中jade模板的layout.jade里面如何得到当前请求的action名字?

Nodejs中jade模板的layout.jade里面如何得到当前请求的action名字?

4 回复

Node.js 中 Jade 模板的 layout.jade 里如何得到当前请求的 action 名字?

在 Node.js 应用中使用 Jade(现称为 Pug)模板引擎时,有时我们希望在全局布局文件(如 layout.jade)中获取当前请求的 action 名称。为了实现这一目标,我们可以利用 Express 框架提供的中间件来传递这些信息。

示例代码

首先,假设你有一个 Express 应用,并且你已经设置了一个中间件来处理路由和传递必要的数据到视图。

  1. 设置中间件

    在你的 Express 应用中,你可以添加一个中间件来将当前请求的 action 名称传递给视图。

    const express = require('express');
    const app = express();
    
    // 假设你有一个名为 'actionName' 的变量
    app.use((req, res, next) => {
      res.locals.actionName = req.route.path; // 这里可以自定义逻辑来获取 action 名称
      next();
    });
    
    app.set('view engine', 'pug');
    
    app.get('/home', (req, res) => {
      res.render('home', { title: 'Home Page' });
    });
    
    app.listen(3000, () => {
      console.log('Server is running on port 3000');
    });
    
  2. 修改 layout.jade

    现在,你可以在 layout.jade 文件中访问 actionName 变量:

    doctype html
    html
      head
        title= title
      body
        block content
        script.
          console.log('Current Action Name:', '#{actionName}');
    
  3. 在子视图中使用

    在子视图(如 home.pug)中,你可以渲染布局并传递必要的数据:

    extends layout
    
    block content
      h1= title
      p Welcome to the Home Page
    

解释

  • 中间件:通过中间件 res.locals,我们将 actionName 设置为当前请求的路径或其他自定义逻辑。

  • 布局文件:在 layout.jade 中,你可以直接使用 #{actionName} 来访问这个变量。这使得布局文件能够动态地显示当前请求的 action 名称。

  • 子视图:子视图(如 home.pug)通过继承 layout.jade 并填充 block content 部分来完成页面的具体内容。

这样,无论用户请求哪个页面,layout.jade 都能获取并显示当前请求的 action 名称。


比如根据当前action设置一些路径,或者Seo的关键字,meta信息

route弄个变量?

在Node.js中使用Jade(现称为Pug)模板引擎时,如果你想在layout.jade文件中获取当前请求的action名字,可以通过将这个信息传递给视图来实现。以下是一种常见的方法:

  1. Express框架设置:如果你使用的是Express框架,可以在路由处理函数中将当前请求的action名称作为变量传递给视图。
app.get('/somepath', function(req, res) {
    var actionName = 'someAction'; // 获取或设置当前请求的action名字
    res.render('somepage', { action: actionName });
});
  1. 在布局文件中使用:然后在你的layout.jade文件中,你可以通过props的方式访问这个变量。
doctype
html
  head
    title My Application
  body
    block content
    script.
      console.log('当前请求的action名字是:', '#{action}');

在这个例子中,#{action}会显示你在渲染视图时传递给它的值。注意,这里的action变量需要确保在每次渲染页面时都正确传递,这样才能在布局文件中正确显示。

示例总结

  • 在路由处理程序中,通过res.render()方法将action变量传递给视图。
  • 在布局文件layout.jade中,使用#{action}来访问这个变量。

这种方法允许你根据不同的请求动态地改变布局中的内容。

回到顶部