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;
}
}
});