使用 nodejs 服务器和 Pug 如何一次显示列表中的元素并使用按钮进行迭代?
Using a nodejs server and Pug how can I display elements from a list one at a time and iterate using a button?
我对 Web 开发和 NodeJs 服务器非常陌生,Pug 这是我第一次使用这些。本质上,我想要一个 div 的框,我想暂时根据 JSON 文件中的列表动态更改该框中的数据,最终当我开始工作时,我会使用数据库来提供该列表。我已经设置了我的服务器,并使用一些在线教程设置了我的 Pug 代码的基本部分。我知道我必须使用一些 javascript 才能完成此操作,但我什至无法在哈巴狗代码的 "script" 部分访问我的列表,这让我更加困惑。这是我到目前为止的代码:
server.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}`);
});
index.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)
注意*脚本部分根本不起作用它给我一个错误说"data"未定义
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 文件,看看我能否让它工作。
页面如下所示:
理想情况下,白框会被列表中每个元素的文本填充,然后当他们单击下一步时,它将显示下一个元素的文本。
我浏览了 Whosebug 和其他论坛,但我似乎无法使用 PUG 找到与此类似的东西,我也查看了其他语言的方法,但我真的很挣扎,因为我什至无法访问我传入的列表称为数据,因为我的控制台只是出错并显示 "data not defined" 但如果我经常使用它(不在脚本中)在 Pug 中它肯定是定义的。提前感谢任何花时间帮助解决这个问题的人,非常感谢!
脚本标记中的 data
变量是客户端 javascript 变量,因此不会被定义,因为它独立于服务器端 data
变量。您可以使用 pug 的 interpolation 功能将 data
的服务器端值放在 pug javascript 块中。
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 来执行此操作。
我对 Web 开发和 NodeJs 服务器非常陌生,Pug 这是我第一次使用这些。本质上,我想要一个 div 的框,我想暂时根据 JSON 文件中的列表动态更改该框中的数据,最终当我开始工作时,我会使用数据库来提供该列表。我已经设置了我的服务器,并使用一些在线教程设置了我的 Pug 代码的基本部分。我知道我必须使用一些 javascript 才能完成此操作,但我什至无法在哈巴狗代码的 "script" 部分访问我的列表,这让我更加困惑。这是我到目前为止的代码:
server.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}`);
});
index.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)
注意*脚本部分根本不起作用它给我一个错误说"data"未定义
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 文件,看看我能否让它工作。
页面如下所示:
理想情况下,白框会被列表中每个元素的文本填充,然后当他们单击下一步时,它将显示下一个元素的文本。
我浏览了 Whosebug 和其他论坛,但我似乎无法使用 PUG 找到与此类似的东西,我也查看了其他语言的方法,但我真的很挣扎,因为我什至无法访问我传入的列表称为数据,因为我的控制台只是出错并显示 "data not defined" 但如果我经常使用它(不在脚本中)在 Pug 中它肯定是定义的。提前感谢任何花时间帮助解决这个问题的人,非常感谢!
脚本标记中的 data
变量是客户端 javascript 变量,因此不会被定义,因为它独立于服务器端 data
变量。您可以使用 pug 的 interpolation 功能将 data
的服务器端值放在 pug javascript 块中。
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 来执行此操作。