使用 res.render 时设置自定义 header

Set custom header when using res.render

我正在使用 express.js 的 res.render 函数,我遇到了一些设置自定义 headers 的问题,我尝试了 4 种方法,但都失败了

这是我的代码

方法一

app.get('/login', function(req, res, next) {
  res.writeHead(200, {'Content-Type':'text/plain; charset=utf-8'});
  next()
});

app.get('/login', function(req, res) {
  res.locals.text="hello";  
  res.render('index');
});

它有一个包含以下代码的错误日志:Error: Can't set headers after they are sent.


方法二(例子来自here

app.get('/login', function(req, res, next) {
  res.header(200, {'Content-Type':'text/plain; charset=utf-8'});
  next()
});

app.get('/login', function(req, res) {
  res.locals.text="hello";
  res.render('index');
});

代码自带错误:TypeError: field.toLowerCase is not a function


方法三

app.get('/login', function(req, res) {
  res.writeHead(200, {'Content-Type': 'application/xhtml+xml; charset=utf-8'});
  res.locals.text="hello";
  res.render('index');
});

代码也有错误:Error: Can't set headers after they are sent.


我能想到的办法就这么多了,还是解决不了,请问有什么方法可以把自定义的header(尤其是编码类型)设置成res.render吗?

要使用 res.render 设置自定义响应 header,您可以使用 res.set()。这是一个示例代码:

app.get('/login', function(req, res) {
  res.set({'Content-Type': 'application/xhtml+xml; charset=utf-8'});
  res.locals.text="hello";
  res.render('index');
});

有关 res.set()

的更多详细信息,请查看快递 document

如果您想为您的回复设置一个 header,您可以在 http.ServerResponse object.

上使用 setHeader 方法
var server = require('http').createServer(function(req, res) {      
    res.setHeader('content-type', 'application/json');      
    res.write(headerStr);
    res.end();
});