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