你如何发送html与restify

时间:2012-06-11 00:29:03

标签: node.js http-headers restify

我想为我的其中一条路线发送简单的html而不是json响应。我尝试设置响应的contentType和header属性,但它似乎没有在标题中设置contentType(浏览器尝试下载文件而不是渲染它)。

res.contentType = 'text/html';
res.header('Content-Type','text/html');
return res.send('<html><body>hello</body></html>');

4 个答案:

答案 0 :(得分:25)

快速操作标题而无需更改整个服务器的格式化程序:

  

restify响应对象也包含节点ServerResponse的所有“原始”方法。

var body = '<html><body>hello</body></html>';
res.writeHead(200, {
  'Content-Length': Buffer.byteLength(body),
  'Content-Type': 'text/html'
});
res.write(body);
res.end();

答案 1 :(得分:12)

如果你在restify配置中覆盖了格式化程序,你必须确保你有一个text / html格式化程序。因此,这是一个配置示例,它将根据响应对象(res)上指定的contentType发送json和jsonp-style或html:

var server = restify.createServer({
    formatters: {
        'application/json': function(req, res, body){
            if(req.params.callback){
                var callbackFunctionName = req.params.callback.replace(/[^A-Za-z0-9_\.]/g, '');
                return callbackFunctionName + "(" + JSON.stringify(body) + ");";
            } else {
                return JSON.stringify(body);
            }
        },
        'text/html': function(req, res, body){
            return body;
        }
    }
});

答案 2 :(得分:10)

另一种选择是打电话

Waves

而不是

res.end('<html><body>hello</body></html>');

答案 3 :(得分:3)

似乎@dlawrence在他的回答中描述的行为自发布答案以来发生了变化。它现在的工作方式(至少在Restify 4.x中)是:

const app = restify.createServer(
  {
    formatters: {
      'text/html': function (req, res, body, cb) {
        cb(null, body)
    }
  }
})