Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set custom header when using res.render

I'm using express.js's res.render function and I met some issue to set custom headers, I'm tried 4 kind of method and all failed

here is my code

Method 1

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');
});

It has a error log with this code: Error: Can't set headers after they are sent.


Method 2 (example from 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');
});

the code comes with the error: TypeError: field.toLowerCase is not a function


Method 3

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

the code also has error: Error: Can't set headers after they are sent.


That's all the ways I can thought and find but still can't resolve, is there any ways to set custom header (especially encoding type) with res.render?

like image 905
Andrew.Wolphoe Avatar asked Aug 26 '17 13:08

Andrew.Wolphoe


1 Answers

To set custom response header with res.render, you can use res.set(). Here is an example code:

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

Please check Express document for more details about res.set()

like image 199
shaochuancs Avatar answered Oct 31 '22 07:10

shaochuancs