sendFile es para enviar archivos y también determina algunos encabezados interesantes del archivo (como la longitud del contenido). Para una solicitud HEAD , idealmente querría exactamente los mismos encabezados, pero solo omitiría el cuerpo.
No parece haber una opción para esto en la API. ¿Tal vez pueda anular algo en el objeto de respuesta para evitar que envíe algo?
Esto es lo que obtuve:
res.sendFile(file, { headers: hdrs, lastModified: false, etag: false })¿Alguien ha solucionado esto?
Como ya escribió Robert Klep, sendFile ya tiene el comportamiento requerido de enviar los encabezados y no enviar el cuerpo si el método de solicitud es HEAD.
Además de eso, Express ya maneja solicitudes HEAD para rutas que tienen controladores GET definidos. Por lo tanto, ni siquiera necesita definir explícitamente ningún controlador HEAD.
Ejemplo:
let app = require('express')(); let file = __filename; let hdrs = {'X-Custom-Header': '123'}; app.get('/file', (req, res) => { res.sendFile(file, { headers: hdrs, lastModified: false, etag: false }); }); app.listen(3322, () => console.log('Listening on 3322')); Esto envía su propio código fuente en GET /file como se puede demostrar con:
$ curl -v -X GET localhost:3322/file * Hostname was NOT found in DNS cache * Trying 127.0.0.1... * Connected to localhost (127.0.0.1) port 3322 (#0) > GET /file HTTP/1.1 > User-Agent: curl/7.35.0 > Host: localhost:3322 > Accept: */* > < HTTP/1.1 200 OK < X-Powered-By: Express < X-Custom-Header: 123 < Accept-Ranges: bytes < Cache-Control: public, max-age=0 < Content-Type: application/javascript < Content-Length: 267 < Date: Tue, 11 Apr 2017 10:45:36 GMT < Connection: keep-alive < [...] El [...] es el cuerpo que no fue incluido aquí. Sin agregar ningún controlador nuevo, esto también funcionará:
$ curl -v -X HEAD localhost:3322/file * Hostname was NOT found in DNS cache * Trying 127.0.0.1... * Connected to localhost (127.0.0.1) port 3322 (#0) > HEAD /file HTTP/1.1 > User-Agent: curl/7.35.0 > Host: localhost:3322 > Accept: */* > < HTTP/1.1 200 OK < X-Powered-By: Express < X-Custom-Header: 123 < Accept-Ranges: bytes < Cache-Control: public, max-age=0 < Content-Type: application/javascript < Content-Length: 267 < Date: Tue, 11 Apr 2017 10:46:29 GMT < Connection: keep-alive <Este es el mismo pero sin cuerpo.
Express usa send para implementar sendFile , que ya hace exactamente lo que usted quiere .