Как вы отправляете 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)
    }
  }
})