代码之家  ›  专栏  ›  技术社区  ›  sreepurna

使用Express发送HTML文件和数据

  •  0
  • sreepurna  · 技术社区  · 7 年前

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

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

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

    对象为:

    res.json(obj);
    

    但是如何把它们放在一起呢?

    3 回复  |  直到 7 年前
        1
  •  0
  •   Arif Khan codemt    7 年前

    简单来说,您不能同时发送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});
    
        2
  •  0
  •   Stefan Octavian    7 年前

    有几种方法可以做到这一点。虽然不是最好的方法,但这是我在项目中使用的方法。我使用了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) })
    

    当然,还有很多其他的方法。

        3
  •  0
  •   Jacob Nelson    7 年前

    您可能无法通过发送回纯HTML来实现这一点。 但您应该能够使用模板化引擎来实现这一点。在模板引擎的帮助下,您应该能够呈现一个视图,并传递在该模板中使用的JSON。

    参考文献: render view

    如;

    // pass a local variable to the view
    res.render('user', { name: 'Tobi' }, function(err, html) {
      // ...
    });
    

    这是完整的清单 Template Engines 由Express JS支持