我想使用express从服务器向客户端发送一个html文件和一个对象,这样当文件加载时,它会使用ajax动态地使用对象和结构。
我知道html文件可以像这样发送:
res.sendFile( __dirname + "/" + "main.html" )
对象为:
res.json(obj);
但如何将它们一起发送?
答案 0 :(得分:0)
有几种方法可以做到这一点。虽然不是最好的方法,但这是我在项目中使用的方法。我使用了ejs,一个强大而简单的模板引擎。
首先,使用npm
安装它npm install ejs
然后,在您的HTML中添加:
<html>
<body>
<script type="text/javascript">
var obj = JSON.parse(<%= objSentFromServer %>)
// do something with obj
</script>
</body>
</html>
服务器端:
let express = require('express')
let app = express()
let ejs = require('ejs')
let fs = require('fs')
let objectSentFromServer = ... // what you need to send
app.get('/', (req, res) => {
fs.readFile(__dirname + '/main.html', (err, html) => {
res.send(ejs.render(html, JSON.stringify(objectSentFromServer)))
})
})
app.listen(8080, (err) => { console.log(err) })
当然,还有很多其他方法。
答案 1 :(得分:0)
您可能无法通过发送纯HTML来实现此目的。 但是你应该能够使用模板引擎实现这一目标。在模板引擎的帮助下,您应该能够渲染视图并传递该模板中使用的JSON。
参考:render view
EG;
type alias Item = {...}
以下是Express JS支持的Template Engines的完整列表
答案 2 :(得分:0)
简单来说,您不能将json和html一起发送,因为我们需要在标头中发送content-type
。你可以发送html或json。
另一种方法是,您可以将html发送到josn,其他对象如下所示
const fs = require('fs');
const html = fs.readFileSync( __dirname + '/main.html' );
res.json({html: html.toString(), data: obj});