Как вы отправляете html с reify
Я хочу отправить простой html вместо json-ответа для одного из моих маршрутов в reify. Я попытался установить свойство contentType и заголовка ответа, но он, похоже, не задает contentType в заголовке (браузер пытается загрузить файл, а не отображать его).
res.contentType = 'text/html';
res.header('Content-Type','text/html');
return res.send('<html><body>hello</body></html>');
Ответы
Ответ 1
Быстрый способ управления заголовками без изменения форматирования для всего сервера:
В обновленном объекте ответа есть все "необработанные" методы сервера node 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();
Ответ 2
Если вы перезаписали форматировщики в конфигурации restify, вам нужно убедиться, что у вас есть форматтер для text/html. Таким образом, это пример конфигурации, которая будет отправлять json и jsonp-style или html в зависимости от типа contentType, указанного в объекте ответа (res):
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;
}
}
});
Ответ 3
Другим вариантом является вызов
res.end('<html><body>hello</body></html>');
Вместо
res.send('<html><body>hello</body></html>');
Ответ 4
Похоже, что поведение @dlawrence, описанное в его ответе, изменилось с тех пор, как был отправлен ответ. Теперь он работает (по крайней мере, в Restify 4.x):
const app = restify.createServer(
{
formatters: {
'text/html': function (req, res, body, cb) {
cb(null, body)
}
}
})