如何使用 Node.js 和 Express 分块发送 HTML?

Leo*_*ang 3 javascript node.js express

我想<head>在处理页面的其余部分之前发送包含样式表。在 PHP 中,我可以使用ob_flush().

我尝试做这样的事情:

app.set('view engine','ejs');

app.get('*',function(req,res){
  res.writeHead(200,{'Content-Type':'text/html'});
  res.write('<!doctype...<link rel=stylesheet...');

  doDBStuff()
    .then(function(data){
      res.render('index',{...}); // uses EJS for templating
    });
});
Run Code Online (Sandbox Code Playgroud)

但是,该res.render()部分不会发送。是否有发送分块数据的内置方法?

一种方法是手动加载 EJS 文件并手动处理它们。我还必须手动发送适当的标头。如果存在,我更喜欢内置方法。

rob*_*lep 5

这是一个简单的 PoC,可以满足您的需求:

var express = require('express');
var app     = express();
var server  = app.listen(3000);

app.set('views', 'views');
app.set('view engine', 'ejs');

app.get('/', function (req, res, next) {
  res.write('<!-- prefix -->');
  setTimeout(function() {
    res.render('index', { ... }, function(err, html) {
      // TODO: handle errors
      res.end(html);
    });
  }, 1000);
});
Run Code Online (Sandbox Code Playgroud)

请注意,它使用 的“回调变体” res.render(),可用于仅呈现模板而不返回响应(如果不这样做,res.render()将产生错误)。或者,您可以使用app.render()which 做同样的事情。