使用express发送html文件和数据

时间:2018-05-29 09:52:28

标签: javascript node.js express

我想使用express从服务器向客户端发送一个html文件和一个对象,这样当文件加载时,它会使用ajax动态地使用对象和结构。

我知道html文件可以像这样发送:

res.sendFile( __dirname + "/" + "main.html" )

对象为:

res.json(obj);

但如何将它们一起发送?

3 个答案:

答案 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});