Nodejs express中render到jade里的数据,能否在js中直接使用?
Nodejs express中render到jade里的数据,能否在js中直接使用?
我想把数据render到jade里,正常的使用没有问题。
但是,我现在有一个这样的需求,我想在JS中直接使用render上来的数据,例如下面带埋render了hotels数据到对应的jade中,
我在对应的JS文件中,想直接输出hotels,console.log(hotels)
。但是我始终没有找到方法~欢迎大家提供方法~谢谢~
res.render('plans/edit', {
hotels : hotels,
})
当然可以!在Node.js的Express框架中,你可以将数据传递给Jade模板(现在称为Pug),然后通过客户端JavaScript来访问这些数据。以下是一个简单的示例,展示了如何实现这一点。
示例代码
1. Express路由设置
首先,在你的Express路由中,将数据传递给Jade模板:
const express = require('express');
const app = express();
app.set('view engine', 'pug'); // 设置视图引擎为Pug
app.get('/plans/edit', (req, res) => {
const hotels = [
{ id: 1, name: 'Hotel A' },
{ id: 2, name: 'Hotel B' }
];
res.render('plans/edit', {
hotels: hotels
});
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
2. Pug模板文件
接下来,在views/plans/edit.pug
文件中,你可以通过一个全局变量或脚本标签将数据传递给客户端JavaScript:
doctype html
html
head
title Plans Edit
body
h1 Hotels
ul#hotel-list
each hotel in hotels
li= hotel.name
script.
window.hotels = !{JSON.stringify(hotels)}
3. 客户端JavaScript
最后,在客户端JavaScript中,你可以直接访问window.hotels
变量:
// 在浏览器控制台中运行
console.log(window.hotels);
或者,如果你在一个外部的.js
文件中,可以通过类似的方式访问:
console.log(window.hotels);
解释
-
Express路由:在Express路由中,我们定义了一个GET请求处理函数,它将
hotels
数组传递给Jade模板。 -
Pug模板:在Pug模板中,我们使用
each
循环渲染每个酒店的名称,并通过script.
标签将hotels
数组转换为JSON字符串并赋值给全局变量window.hotels
。 -
客户端JavaScript:在客户端JavaScript中,我们可以通过访问
window.hotels
来获取服务器端传递的数据。
这种方式使得服务器端的数据可以在客户端JavaScript中直接使用,从而满足你在JS文件中直接使用render数据的需求。
在线求助~
顶,没人回复~
render时解析jade生成html这一过程是在服务端执行的 ,js是在客户端执行的,想办法把你提供的数据传递给页面上的js就行了
用res.json(),直接跳过jade提供数据接口
这个地方有个转换过程,首先 jade 被render之后,输出的是一个html(通常是html页面, 不排除输出其他变态玩意)。 然后html页面被浏览器解析,js代码被执行起来。
所以首先你要关心的是, 怎么让jade模板渲染之后得到一个静态页面,这个静态页面中,有js运行所需要的数据对象
然后再关心这个静态页面,怎么正确的运行。
最后附上提示代码:
res.render('plans/edit', {
hotels : JSON.stringify(hotels),
});
参考代码: res.render(‘plans/edit’, { hotels : hotels, })
plans/edit.jade script. window.hotels = !{JSON.stringify(hotels)};
在 Node.js 和 Express 中,当你使用 res.render
渲染 Jade(现称为 Pug)模板时,传递的数据仅在服务器端渲染模板时可用。如果你想在客户端 JavaScript 中访问这些数据,需要通过某种方式将数据传递给前端。
一种常见的方式是将数据嵌入到 HTML 页面中,通常是在 <script>
标签中,这样在浏览器中运行的 JavaScript 就可以访问它了。
示例代码
服务器端 (Node.js/Express)
const express = require('express');
const app = express();
app.set('view engine', 'pug'); // 设置视图引擎为 Pug
app.get('/example', (req, res) => {
const hotels = [{ name: 'Hotel A' }, { name: 'Hotel B' }];
res.render('index', { hotels });
});
app.listen(3000, () => console.log('Server running on port 3000'));
客户端 (Pug 模板)
doctype
html
head
title Example Page
body
script.
var hotels = !{JSON.stringify(hotels)};
script(src='/client.js')
在这个例子中,!{JSON.stringify(hotels)}
会将后端传过来的 hotels
数据转换成 JSON 字符串,并直接嵌入到 <script>
标签中。然后,你可以在 /client.js
文件中访问 hotels
变量。
客户端 JavaScript (client.js
)
console.log(hotels); // 输出 hotes 数据
解释
- 服务器端:通过
res.render
方法,将hotels
数据传递给 Pug 模板。 - Pug 模板:使用
!{JSON.stringify(hotels)}
将数据传递给客户端的 JavaScript 变量。 - 客户端 JavaScript:通过全局变量
hotels
访问该数据。
这种方法允许你在客户端 JavaScript 中直接访问从服务器端传递过来的数据。