Node.js 将 HTML 作为响应发送给客户端

Pre*_*vic 3 node.js

Node.js 中是否可以返回 HTML(例如<div>Test</div>)作为对客户端的响应?

sendFile()我在 Express on method()中看到了该选项。

Node中有类似的东西吗?

我找到了这个解决方案:

var myHtmlData;
fs.readFile('./index.html', (err, data) => {
    if(err){
        throw err;
    } else {
        myHtmlData = data
    }
  })
  // and after use it 
 response.write(myHtmlData)
Run Code Online (Sandbox Code Playgroud)

但我想知道是否可以使用类似于sendFile()直接编写 html 的方法来完成此操作<div>Test</div>,而无需从另一个文件中读取它。

小智 5

当然。这很简单。以下代码将响应以 HTML 形式返回给客户端。

var http = require('http');

http.createServer(function(req, res){
   if(req.url === "/"){
      res.writeHead(200, { 'Content-Type':'text/html'});
      res.end("<div><p>Test<p></div>");
   }
}).listen(3000);
Run Code Online (Sandbox Code Playgroud)

如果您想提供 HTML 或 JSON 文件作为响应,您可以执行以下代码。

var http = require('http');
var fs = require('fs');

http.createServer(function(req, res){

    if(req.url === '/I_want_json'){

        res.writeHead(200, { 'Content-Type':'application/json'});

        var obj = {
            firstName: "Jane",
            lastName: "Doe",
        };

        res.end(JSON.stringify(obj));
    }
    else if (req.url === '/I_want_html'){
        res.writeHead(200, { 'Content-Type':'text/html'});
        html = fs.readFileSync('./index.html');
        res.end(html);
    }
    else{
        res.writeHead(404);
        res.end();
    }
}).listen(3000, '127.0.0.1');
Run Code Online (Sandbox Code Playgroud)

不要忘记如上所述设置Content-Type,因为它是客户端区分响应类型的强制部分。