node method log framework errors delete createserver node.js http-headers restify

node.js - method - ¿Cómo envías html con restify?



restify vs express (4)

Quiero enviar html en lugar de una respuesta json para una de mis rutas en Restify. Intenté establecer contentType y la propiedad de encabezado de la respuesta pero no parece establecer contentType en el encabezado (el navegador intenta descargar el archivo en lugar de representarlo).

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


Manera rápida de manipular los encabezados sin cambiar los formateadores para todo el servidor:

Un objeto de respuesta de restauración tiene todos los métodos "sin formato" de un nodo ServerResponse también.

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


Otra opción es llamar.

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

En lugar de

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


Parece que el comportamiento que @dlawrence describe en su respuesta ha cambiado desde que se publicó la respuesta. La forma en que funciona ahora (al menos en Restify 4.x) es:

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


Si ha sobrescrito a los formateadores en la configuración de restauración, deberá asegurarse de tener un formateador para texto / html. Entonces, este es un ejemplo de una configuración que enviará json y jsonp-style o html según el tipo de contenido especificado en el objeto de respuesta (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; } } });