javascript - 使用 Nodejs 服务器和 Pug 如何一次显示列表中的元素并使用按钮进行迭代?

标签 javascript html node.js express pug

我对 Web 开发和 NodeJs 服务器非常陌生,Pug 这是我第一次使用这些。本质上,我想要一个 div 盒子,我现在想根据 JSON 文件中的列表动态更改该盒子中的数据,最终当我开始工作时,我将使用数据库来提供该列表。我已经设置了我的服务器,并使用一些在线教程设置了我的 Pug 代码的基本部分。我知道我必须使用一些 javascript 来完成此操作,但我什至无法访问我的哈巴狗代码的“脚本”部分中的列表,这让我更加困惑。这是我到目前为止的代码:

服务器.js:

const express = require('express');
const app = express();
const testTweets = require('./testTweets.json');
app.set('view engine', 'pug');
app.use(express.static(__dirname + '/public'));


app.get('/', (req, res) => {
  res.render('index', {
    title: 'Tweet Labeler',
    data: testTweets.tweets
  });
});

const server = app.listen(9000,() => {
   console.log(`Express running → PORT ${server.address().port}`);
});

索引.pug:

doctype html
html
  head
    title #{title}
    link(rel='stylesheet', href='/css/style.css')
    meta(name="viewport" content="width=device-width, initial-scale=1")
  body
    main
      block header
        header.header
          h1 #{title}
      block content
      div.container
          h2#label Tweet ID:
          div.tweetBox
          button.button-next Next
          script.
            var maxLength = data.length
            console.log("In the script tag!" + maxLength)

注意*脚本部分根本不起作用,它给我一个错误,说“数据”未定义

testTweets.json:

{
  "tweets": [
    {
      "id":"0",
      "text": "this is tweet index 0",
      "relevancy": "unknown"
    },
    {
      "id":"1",
      "text": "this is tweet index 1",
      "relevancy": "unknown"
    },
    {
      "id":"2",
      "text": "this is tweet index 2",
      "relevancy": "unknown"
    },
    {
      "id":"3",
      "text": "this is tweet index 3",
      "relevancy": "unknown"
    },
    {
      "id":"4",
      "text": "this is tweet index 4",
      "relevancy": "unknown"
    }
  ]
}

非常基本的 json 文件,只是为了看看我是否可以让它工作。

页面如下所示: 理想情况下,白色框将填充列表中每个元素的文本,然后当他们单击“下一个”时,它将显示下一个元素的文本。 enter image description here

我浏览过 stackoverflow 和其他论坛,但我似乎无法找到与使用 PUG 类似的东西,并且我查看了其他语言的方法,但我真的很挣扎,因为我什至无法访问该列表我传递调用的数据是因为我的控制台出错并显示“数据未定义”,但如果我在 Pug 中定期使用它(不在脚本中)部分,它肯定已定义。预先感谢任何花时间提供帮助的人,非常感谢!

最佳答案

脚本标记中的 data 变量是客户端 JavaScript 变量,因此不会被定义,因为它独立于服务器端 data 变量。您可以使用 pug 的 interpolationdata 的服务器端值放入 pug javascript block 中。功能。

div.container
  h2#label Tweet ID:
  div.tweetBox
    each tweet in data
      p=tweet.text
  button.button-next Next
  script.
    var data = !{JSON.stringify(data)};
    var maxLength = data.length;
    console.log("In the script tag!" + maxLength);

data 将在服务器上渲染期间替换为服务器端数据变量中的 JSON 值。您可以使用 pug 的 each 迭代器来迭代数据来显示推文,也可以使用客户端 JavaScript 来执行此操作。

关于javascript - 使用 Nodejs 服务器和 Pug 如何一次显示列表中的元素并使用按钮进行迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59498273/

相关文章:

javascript - PHP 中的 jQuery/JavaScript 输出

android - 如何停止 Android 中 WebView 的内部滚动?

html - 如何仅对 mat-card 应用不透明度,而不对 mat-card 内的其余内容应用不透明度?

javascript - 如何使用 Mongoose 删除对象内的子文档

javascript - 使用 node.js 从文件中读取

javascript - 如何仅在 JavaScript/jQuery 中没有默认值时才执行操作?

javascript - 如何将一个值从数据库转换为数组

当返回 false 时,Javascript AJAX 调用在 Firefox 中失败;

node.js - res.send() 不发送当前响应,而是保留最后一个响应

node.js - 当尝试作为反向代理连接到 Node 应用程序时,Nginx 连接被拒绝