You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过Express路由传上下文至仅含Mixin的Pug文件无响应问题

解决Express传递上下文到Pug Mixin的问题

我来帮你搞定这个问题~你现在的问题主要有两个核心点:一是Pug文件里只定义了mixin但没调用它,导致渲染时没有任何输出;二是得让mixin能正确拿到你传递的上下文数据。

第一步:优化Express路由(可选,但更清晰)

你的路由代码本身是有效的,不过把数据包在一个命名对象里能避免变量名冲突,可读性也更强:

app.post('/comment', (req, res) => {
  const commentData = { text: 'working' };
  // 把数据挂载到locals的comment属性上
  res.render('comment-section', { comment: commentData });
});

第二步:修改Pug文件,调用Mixin并传递数据

Pug的mixin只是一个可复用的模板片段,定义完之后必须主动调用才会渲染。你有两种方式让mixin拿到数据:

方式1:调用Mixin时直接传参

这种方式更灵活,适合需要多次复用mixin的场景:

// 定义mixin时声明接收一个参数
mixin comment(commentText)
  div.comment-content
    div.row
      div.col-lg-1
        a(href="#")
          img(src="img/default_profile.jpg").comment-profile-img
      div.col-lg-10
        p.user-comment= commentText // 使用传入的参数

// 必须调用mixin,把Express传过来的comment.text传进去
+comment(comment.text)

方式2:Mixin直接访问全局上下文变量

如果这个mixin只用于当前页面,也可以直接访问Express传递到locals里的变量:

mixin comment()
  div.comment-content
    div.row
      div.col-lg-1
        a(href="#")
          img(src="img/default_profile.jpg").comment-profile-img
      div.col-lg-10
        p.user-comment= comment.text // 直接访问locals中的comment对象

// 调用mixin触发渲染
+comment()

如果想沿用你原来的路由写法(res.render('comment-section', test),此时locals里直接有text变量),Pug可以改成这样:

mixin comment()
  div.comment-content
    div.row
      div.col-lg-1
        a(href="#")
          img(src="img/default_profile.jpg").comment-profile-img
      div.col-lg-10
        p.user-comment= text // 直接使用locals里的text变量

+comment()

关键原因总结

你之前的代码没反应,核心是只定义了mixin但没有调用它——Pug不会自动执行mixin,必须用+mixinName()的语法触发渲染。另外只要确保mixin能正确访问到你传递的上下文数据,两种方式选一种就能解决问题啦~

内容的提问来源于stack exchange,提问作者Georgi Enev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:09:05