2012-06-11 14 views
14

Quiero enviar html simple en lugar de una respuesta json para una de mis rutas en restify. Intenté configurar la propiedad contentType y header de la respuesta, pero no parece configurar contentType en el encabezado (el navegador intenta descargar el archivo en lugar de procesarlo).cómo se envía html con restify

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

Respuesta

21

manera rápida para manipular las cabeceras sin cambiar formateadores para el conjunto servidor:

Un objeto de respuesta restify tiene todos los métodos "en bruto" de un nodo ServerResponse en él 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(); 
+2

¿No es necesario que finalice con una llamada a 'next()'? – Justin

+0

Esto no funcionará si se utiliza la codificación gzip. Es mejor usar un formateador de respuesta personalizado y usar res.send para calcular la longitud correcta del contenido. –

11

Si ha sobrescrito los formateadores en la configuración restify, usted tiene que asegurarse de que tiene un formateador de texto/html. Por lo tanto, este es un ejemplo de una configuración que enviará JSON y de estilo jsonp o html dependiendo de la contentType especificada en el objeto 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; 
     } 
    } 
}); 
+0

FWMI. Puede volver a asignar el formateador original utilizando la biblioteca de restify. Reemplace la línea 3 con: ''aplicación/json ': require (' restify/lib/formateadores/json ')' –

10

Otra opción es llamar

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

En lugar de

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

Parece que el comportamiento @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) 
    } 
    } 
}) 
Cuestiones relacionadas