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

如何在Pug中使用setInterval?解决getClock非函数报错问题

问题解决:"getClock is not function" 错误修复

错误原因分析

  1. 函数传递错误:你在Node.js中传递给Pug的是getClock: getClock(),这是执行函数后返回的字符串(clock的值),而非函数本身,导致Pug中找不到getClock函数。
  2. 环境混淆:服务器端Node.js的函数无法直接在客户端浏览器中运行,两者运行环境完全隔离,不能跨环境调用函数。
  3. Pug脚本语法错误:- setInterval(...)是Pug的服务器端执行代码,定时器逻辑应该放在客户端脚本中,否则会在服务器端执行而非浏览器。

修正后的代码

Node.js 代码

let clock;
function getClock() {
  const now = new Date();
  // 补零处理,保证时间格式为两位数字
  const hours = String(now.getHours()).padStart(2, '0');
  const minutes = String(now.getMinutes()).padStart(2, '0');
  const seconds = String(now.getSeconds()).padStart(2, '0');
  clock = `${hours}:${minutes}:${seconds}`;
}

app.get("/main", (req, res) => {
  // 生成初始时间,传递给Pug渲染初始值
  getClock();
  // 仅传递初始时钟字符串,无需传递服务器端函数
  res.render("mainP.pug", { lists: rows, clock: clock });
});

Pug 代码

body 
  .header 
    .clock#clock= clock

// 使用script.包裹客户端原生JS代码,在浏览器中执行
script.
  function updateClock() {
    const now = new Date();
    const hours = String(now.getHours()).padStart(2, '0');
    const minutes = String(now.getMinutes()).padStart(2, '0');
    const seconds = String(now.getSeconds()).padStart(2, '0');
    // 更新DOM中的时钟内容
    document.getElementById('clock').textContent = `${hours}:${minutes}:${seconds}`;
  }
  // 每秒执行一次时钟更新
  setInterval(updateClock, 1000);

核心说明

  • 服务器端仅负责渲染初始时钟值,后续的每秒更新逻辑完全由客户端JS处理,避免跨环境调用问题。
  • 使用script.在Pug中编写客户端JS代码,确保代码在浏览器中执行,而非服务器端。
  • 客户端通过document.getElementById直接操作DOM,实时更新时钟显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:18:14