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

标签 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
    });
});

然而,res.render()部分未发送。是否有发送分块数据的内置方式?

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

最佳答案

这是一个简单的 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);
});

请注意,它使用了 res.render() 的“回调变体”,它可用于仅呈现模板而不发送回响应(如果您不这样做的话) , res.render() 会产生一个错误)。或者,您可以使用 app.render()这也是一样的。

关于javascript - 如何使用 Node.js 和 Express 分块发送 HTML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31577388/

相关文章:

javascript - 使循环和代码更有效地使用循环处理大量数字

javascript - 如何等待一组异步回调函数?

javascript - 如何处理整个组件的事件 Action ?

javascript - 插入或保存到 mongodb 返回 500 服务器错误

javascript - 通过 package-lock.json 减轻差异噪音

javascript - 如果未发送,请重试发送邮件

javascript - 为什么express在这个方法中显示 "error can not set headers after they are sent"?

javascript - 在 Laravel 中混合使用 PHP 和 Javascript

javascript - 从 Node 表达应用程序加载页面时获取标题?

javascript - 什么时候在 Nodejs 中使用匿名函数?