尝试在 Pug 中迭代 JSON 但不断出现长度错误

Trying to iterate over JSON in Pug but keep getting length error

我正在使用 express 和 pug。

这是 index.js 文件:

app.get('/', function(req, res) {
    var bookStore = [
        {
            title: "Templating with Pug",
            author: "Winston Smith",
            pages: 143,
            year: 2017
        },
        {
            title: "Node.js will help",
            author: "Guy Fake",
            pages: 879,
            year: 2015
        }
    ];
    res.render("index", {
        bookStore: bookStore
    });
});

这是哈巴狗模板:

each book in bookStore
    ul
        li= book.title
        li= book.author
        li= book.pages
        li= book.year

每次我尝试使用 pug cli 翻译 index.pug 文件时,我都会收到此错误:

TypeError: index.pug:1
  > 1| each book in bookStore
    2|     ul
    3|         li= book.title
    4|         li= book.author

Cannot read property 'length' of undefined
    at eval (eval at wrap (C:\Users\AppData\Roaming\npm\node_modules\pug-cli\node_modules\pug-runtime\wrap.js:6:10), <anonymous>:6:32)
    at eval (eval at wrap (C:\Users\AppData\Roaming\npm\node_modules\pug-cli\node_modules\pug-runtime\wrap.js:6:10), <anonymous>:53:4)
    at template (eval at wrap (C:\Users\AppData\Roaming\npm\node_modules\pug-cli\node_modules\pug-runtime\wrap.js:6:10), <anonymous>:54:3)
    at renderFile (C:\Users\AppData\Roaming\npm\node_modules\pug-cli\index.js:285:40)
    at C:\Users\AppData\Roaming\npm\node_modules\pug-cli\index.js:149:5
    at Array.forEach (<anonymous>)
    at Object.<anonymous> (C:\Users\AppData\Roaming\npm\node_modules\pug-cli\index.js:148:9)
    at Module._compile (internal/modules/cjs/loader.js:1158:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
    at Module.load (internal/modules/cjs/loader.js:1002:32) {
  path: 'index.pug'
}

起初我对自己的代码没有信心。但这是一个假定的工作示例: https://pug.programmingpedia.net/en/tutorial/9545/iteration-with-pug

我做错了什么,似乎因为 pug cli 不“知道” bookStore 变量,所以它不会编译...但这不就是模板化的原理吗? 我是不是遗漏了什么声明什么的?

好吧,我想通了:当您使用数组编译 .pug 文件时,您必须使用 -O 选项来指定一些变量: pug -O '{"bookStore": "test"}' index.pug 有效,但是: pug index.pug 不工作。

我觉得这有点奇怪。

您需要使用 express 来完成 Getting started with pug 提到的操作,而不是 cli。

首先,运行npm install express pug安装包。

其次,使用以下代码设置您的 server.js。

// server.js
const express = require('express')
const app = express()

// setup template you want to use.
app.set("view engine", "pug")

app.get('/', function (req, res) {
  res.render('index', {test: [1,2,3]})
})

app.listen(8080)

第三,将你的 index.pug 设置为“views/index.pug”,内容如下。

div
    each val in test
        ul
            li= val

现在您的文件夹结构将如下所示。

|-- node_modules
|-- server.js
|-- views
|----|---index.pug

第四,通过node server.js启动你的服务器。

最后,在浏览器中输入http://localhost:8080 url,你会看到结果。