NodeJS & Jade/Pug 变量未在 jade 脚本中定义?



当我将变量传递给Jade时,它看起来正常工作,例如#{myvar}可以使用根本不加载。在我的脚本块中进行类型(myvar)后,它说它在某一时刻不确定,但现在没有任何东西。我的代码看起来像这样:

- typeof(rm120[0].description) <---- Returns string
div#change !{rm120[0].description} <----- Works perfectly fine
div#test 
script.
  change.innerHTML = "test code" <------ Works perfectly fine
  test.innerHTML = rm120[0].description 
  test.innerHTML = typeof(rm120)
  test.innerHTML = typeof(locals.rm120)

脚本中的第一个线之后的所有行。似乎永远不会加载或只是被忽略,我非常困惑为什么我不能在脚本块中使用从node.js文件中传递的对象。任何帮助将不胜感激!

pug中的 script标记呈现文本,该文本发送给客户端以作为客户端JavaScript运行。由于客户端不存在服务器端变量,因此需要以某种方式将它们传递给客户端。

两种可能的方法是渲染哈停泊或通过AJAX调用传递数据的变量。

渲染

将变量渲染到JavaScript中是传递数据的最简单方法,但我倾向于将其限于JS应用所需的非常简单的Bootstrap数据。

script.
   let rm120 = !{JSON.stringify(rm120)}
   console.log(rm210)

ajax

使用API端点将JSON对象传递到更为复杂的设置,因为需要有服务器端点,并且您开始处理异步请求。随着应用程序开始传递更多数据或更复杂的数据,这是一种更可扩展的共享方法。

script.
   fetch("/api/v1/rm120")
     .then(response => response.blob())
     .then(body => {
        console.log(body)
     })
     .catch(err => console.log(err))

我假设您正在尝试在HTML文件上插入rm120[0].description的实际 value 。在这种情况下,您需要使用#{}或!{}。

如果您不这样做,那么" RM120 [0] .DESCRIPTION"一词将被写入您的HTML文件。而且,当它运行客户端时,可能不会有RM120。

最新更新