Response

El objeto res representa la respuesta HTTP que una aplicación Express envía cuando recibe una petición HTTP.

En esta documentación y por convención, el objeto siempre se denomina res (y la petición HTTP es req) pero su nombre real lo determinan los parámetros de la función de callback en la que estás trabajando.

Por ejemplo:

app.get('/user/:id', function (req, res) {
res.send('user ' + req.params.id);
});

Pero también podrías tener:

app.get('/user/:id', function (request, response) {
response.send('user ' + request.params.id);
});

El objeto res es una versión mejorada del propio objeto response de Node y soporta todos los campos y métodos integrados.

Propiedades

res.app

Esta propiedad contiene una referencia a la instancia de la aplicación Express que está usando el middleware.

res.app es idéntico a la propiedad req.app en el objeto de petición.

app.get('/', function (req, res) {
console.dir(res.app.get('view engine'));
console.dir(res.app === req.app);
// => true
res.send('OK');
});

res.headersSent

Propiedad booleana que indica si la aplicación envió headers HTTP para la respuesta.

app.get('/', function (req, res) {
console.dir(res.headersSent); // false
res.send('OK');
console.dir(res.headersSent); // true
});

res.locals

Usa esta propiedad para establecer variables accesibles en las plantillas renderizadas con res.render. Las variables establecidas en res.locals están disponibles dentro de un único ciclo petición-respuesta, y no se compartirán entre peticiones.

Advertencia

El objeto locals es usado por los motores de vistas para renderizar una respuesta. Las claves del objeto pueden ser particularmente sensibles y no deberían contener entrada controlada por el usuario, ya que puede afectar el funcionamiento del motor de vistas o proporcionar un vector para cross-site scripting. Consulta la documentación del motor de vistas usado para consideraciones adicionales.

Para mantener variables locales para usar en el renderizado de plantillas entre peticiones, usa app.locals en su lugar.

Esta propiedad es útil para exponer información a nivel de petición, como el nombre de la ruta de la petición, el usuario autenticado, los ajustes del usuario, etc., a las plantillas renderizadas dentro de la aplicación.

app.use(function (req, res, next) {
// Make `user` and `authenticated` available in templates
res.locals.user = req.user;
res.locals.authenticated = !req.user.anonymous;
next();
});

res.req

Esta propiedad contiene una referencia al objeto request que se relaciona con este objeto de respuesta.

app.get('/', function (req, res) {
console.dir(res.req === req);
// => true
res.send('OK');
});

Métodos

res.append()

Argumentos

field
Tipo: String

El nombre del header de respuesta HTTP al que añadir.

value
Tipo: String | String[] | undefined

El valor o valores a añadir al header.

Añade el value especificado al field del header de respuesta HTTP. Si el header no está ya establecido, crea el header con el valor especificado. El parámetro value puede ser un string o un array.

Nota

llamar a res.set() después de res.append() restablecerá el valor del header establecido previamente.

res.append('Link', ['<http://localhost/>', '<http://localhost:3000/>']);
res.append('Set-Cookie', 'foo=bar; Path=/; HttpOnly');
res.append('Warning', '199 Miscellaneous warning');

res.attachment()

Argumentos

filename
Tipo: String | undefined

El nombre del archivo usado para establecer el parámetro “filename=” de Content-Disposition y el Content-Type (a partir de su extensión).

Establece el campo de header Content-Disposition de la respuesta HTTP a “attachment”. Si se proporciona un filename, entonces establece el Content-Type basándose en la extensión mediante res.type(), y establece el parámetro “filename=” de Content-Disposition.

res.attachment();
// Content-Disposition: attachment
res.attachment('path/to/logo.png');
// Content-Disposition: attachment; filename="logo.png"
// Content-Type: image/png

res.clearCookie()

Argumentos

name
Tipo: String

El nombre de la cookie a borrar.

options
Tipo: Object | undefined

Opciones de Cookie, que deben coincidir con las proporcionadas a res.cookie() (excluyendo expires y maxAge).

Borra la cookie con el name especificado enviando un header Set-Cookie que establece su fecha de expiración en el pasado. Esto indica al cliente que la cookie ha expirado y ya no es válida. Para más información sobre las options disponibles, consulta res.cookie().

Precaución

Si las opciones maxAge o expires están establecidas, la cookie puede no borrarse dependiendo de los valores de tiempo proporcionados, ya que Express no ignora estas opciones. Por lo tanto, se recomienda omitir estas opciones al llamar a este método. Pasar estas dos opciones ha quedado obsoleto desde Express v4.20.0.

Precaución

Los navegadores web y otros clientes compatibles solo borrarán la cookie si las options dadas son idénticas a las proporcionadas a res.cookie(), excluyendo expires y maxAge.

res.cookie('name', 'tobi', { path: '/admin' });
res.clearCookie('name', { path: '/admin' });

res.cookie()

Argumentos

name
Tipo: String

El nombre de la cookie.

value
Tipo: String | Object

El valor de la cookie; un objeto se serializa como JSON.

options
Tipo: Object | undefined

Opciones para el header Set-Cookie.

domain
Tipo: String

Nombre de dominio para la cookie. Por defecto es el nombre de dominio de la aplicación.

encode
Tipo: Function

Una función síncrona usada para la codificación del valor de la cookie. Por defecto es encodeURIComponent.

expires
Tipo: Date

Fecha de expiración de la cookie en GMT. Si no se especifica o se establece a 0, crea una cookie de sesión.

httpOnly
Tipo: Boolean

Marca la cookie para que sea accesible solo por el servidor web.

maxAge
Tipo: Number

Opción conveniente para establecer el tiempo de expiración relativo al tiempo actual en milisegundos.

path
Tipo: String Por defecto: "/"

Ruta para la cookie. Por defecto es ”/”.

partitioned
Tipo: Boolean

Indica que la cookie debe almacenarse usando almacenamiento particionado. Consulta CHIPS para más detalles.

priority
Tipo: String

Valor del atributo “Priority” de Set-Cookie.

secure
Tipo: Boolean

Marca la cookie para usarse solo con HTTPS.

signed
Tipo: Boolean

Indica si la cookie debe firmarse.

sameSite
Tipo: Boolean | String

Valor del atributo “SameSite” de Set-Cookie.

Establece la cookie name al value. El parámetro value puede ser un string o un objeto convertido a JSON.

Precaución

Todo lo que hace res.cookie() es establecer el header HTTP Set-Cookie con las opciones proporcionadas. Cualquier opción no especificada usa por defecto el valor indicado en RFC 6265.

Por ejemplo:

res.cookie('name', 'tobi', { domain: '.example.com', path: '/admin', secure: true });
res.cookie('remember_me', '1', { expires: new Date(Date.now() + 900000), httpOnly: true });

Puedes establecer múltiples cookies en una sola respuesta llamando a res.cookie varias veces, por ejemplo:

res
.status(201)
.cookie('access_token', 'Bearer ' + token, {
expires: new Date(Date.now() + 8 * 3600000), // cookie will be removed after 8 hours
})
.cookie('test', 'test')
.redirect(301, '/admin');

La opción encode te permite elegir la función usada para la codificación del valor de la cookie. No soporta funciones asíncronas.

Caso de uso de ejemplo: Necesitas establecer una cookie para todo el dominio para otro sitio en tu organización. Este otro sitio (que no está bajo tu control administrativo) no usa valores de cookie codificados con URI.

// Default encoding
res.cookie('some_cross_domain_cookie', 'http://mysubdomain.example.com', { domain: 'example.com' });
// Result: 'some_cross_domain_cookie=http%3A%2F%2Fmysubdomain.example.com; Domain=example.com; Path=/'
// Custom encoding
res.cookie('some_cross_domain_cookie', 'http://mysubdomain.example.com', {
domain: 'example.com',
encode: String,
});
// Result: 'some_cross_domain_cookie=http://mysubdomain.example.com; Domain=example.com; Path=/;'

La opción maxAge es una opción conveniente para establecer “expires” relativo al tiempo actual en milisegundos. Lo siguiente es equivalente al segundo ejemplo de arriba.

res.cookie('remember_me', '1', { maxAge: 900000, httpOnly: true });

Puedes pasar un objeto como parámetro value; este se serializa como JSON y es parseado por el middleware bodyParser().

res.cookie('cart', { items: [1, 2, 3] });
res.cookie('cart', { items: [1, 2, 3] }, { maxAge: 900000 });

Cuando usas el middleware cookie-parser, este método también soporta cookies firmadas. Simplemente incluye la opción signed establecida a true. Entonces res.cookie() usará el secreto pasado a cookieParser(secret) para firmar el valor.

res.cookie('name', 'tobi', { signed: true });

Luego puedes acceder a este valor a través del objeto req.signedCookie.

res.download()

Argumentos

path
Tipo: String

La ruta al archivo a transferir. Si es relativa, se resuelve contra el directorio de trabajo actual o la opción root.

filename
Tipo: String | undefined

El nombre del archivo para el parámetro “filename=” de Content-Disposition; sobrescribe el nombre derivado de path.

options
Tipo: Object | undefined Añadido en: v4.16.0

Opciones enviadas a res.sendFile().

maxAge
Tipo: Number | String Por defecto: 0

Establece la propiedad max-age del header Cache-Control en milisegundos, o un string en formato ms.

root
Tipo: String

Directorio raíz para nombres de archivo relativos.

lastModified
Tipo: Boolean Por defecto: true

Establece el header Last-Modified a la fecha de última modificación del archivo en el SO. Establece false para deshabilitarlo.

headers
Tipo: Object

Objeto que contiene headers HTTP para servir con el archivo.

dotfiles
Tipo: String Por defecto: "ignore"

Opción para servir dotfiles. Los valores posibles son "allow", "deny", y "ignore".

acceptRanges
Tipo: Boolean Por defecto: true

Habilita o deshabilita la aceptación de peticiones con rango.

cacheControl
Tipo: Boolean Por defecto: true

Habilita o deshabilita el establecimiento del header de respuesta Cache-Control.

immutable
Tipo: Boolean Por defecto: false

Habilita o deshabilita la directiva immutable en el header de respuesta Cache-Control. Si se habilita, la opción maxAge también debe especificarse para habilitar el caché.

fn
Tipo: Function | undefined

Callback fn(err) invocado cuando la transferencia se completa o ocurre un error.

Transfiere el archivo en path como un “attachment”. Típicamente, los navegadores pedirán al usuario que lo descargue. Por defecto, el parámetro “filename=” del header Content-Disposition se deriva del argumento path, pero puede sobrescribirse con el parámetro filename. Si path es relativo, entonces se basará en el directorio de trabajo actual del proceso o la opción root, si se proporciona.

Advertencia

Esta API proporciona acceso a datos del sistema de archivos en ejecución. Asegúrate de que (a) la forma en que se construyó el argumento path es segura si contiene entrada del usuario o (b) establece la opción root a la ruta absoluta de un directorio para contener el acceso dentro de él.

Cuando se proporciona la opción root, Express validará que la ruta relativa proporcionada como path se resolverá dentro de la opción root dada.

El método invoca la función de callback fn(err) cuando la transferencia se completa o cuando ocurre un error. Si se especifica la función de callback y ocurre un error, la función de callback debe manejar explícitamente el proceso de respuesta ya sea finalizando el ciclo petición-respuesta, o pasando el control a la siguiente ruta.

res.download('/report-12345.pdf');
res.download('/report-12345.pdf', 'report.pdf');
res.download('/report-12345.pdf', 'report.pdf', function (err) {
if (err) {
// Handle error, but keep in mind the response may be partially-sent
// so check res.headersSent
} else {
// decrement a download credit, etc.
}
});

res.end()

Argumentos

data
Tipo: String | Buffer | undefined

Datos a escribir antes de finalizar la respuesta.

encoding
Tipo: String | undefined

La codificación para data cuando es un string.

callback
Tipo: Function | undefined

Se llama una vez que la respuesta ha finalizado.

Finaliza el proceso de respuesta. Este método viene del núcleo de Node, específicamente del método response.end() de http.ServerResponse.

Úsalo para finalizar rápidamente la respuesta sin ningún dato. Si necesitas responder con datos, usa en su lugar métodos como res.send() y res.json().

res.end();
res.status(404).end();

res.format()

Argumentos

object
Tipo: Object

Un objeto cuyas claves son tipos MIME (o nombres de extensión) mapeados a funciones manejadoras, opcionalmente con un manejador default.

Realiza negociación de contenido en el header HTTP Accept del objeto de petición, cuando está presente. Usa req.accepts() para seleccionar un manejador para la petición, basándose en los tipos aceptables ordenados por sus valores de calidad. Si el header no se especifica, se invoca el primer callback. Cuando no se encuentra ninguna coincidencia, el servidor responde con 406 “Not Acceptable”, o invoca el callback default.

El header de respuesta Content-Type se establece cuando se selecciona un callback. Sin embargo, puedes alterar esto dentro del callback usando métodos como res.set() o res.type().

El siguiente ejemplo respondería con { "message": "hey" } cuando el campo del header Accept está establecido a “application/json” o ”*/json” (sin embargo, si es ”*/*”, entonces la respuesta será “hey”).

res.format({
'text/plain': function () {
res.send('hey');
},
'text/html': function () {
res.send('<p>hey</p>');
},
'application/json': function () {
res.send({ message: 'hey' });
},
default: function () {
// log the request and respond with 406
res.status(406).send('Not Acceptable');
},
});

Además de los tipos MIME canonizados, también puedes usar nombres de extensión mapeados a estos tipos para una implementación un poco menos verbosa:

res.format({
text: function () {
res.send('hey');
},
html: function () {
res.send('<p>hey</p>');
},
json: function () {
res.send({ message: 'hey' });
},
});

res.get()

Argumentos

field
Tipo: String

El nombre del header de respuesta a leer (insensible a mayúsculas y minúsculas).

Devuelve el header de respuesta HTTP especificado por field. La coincidencia es insensible a mayúsculas y minúsculas.

res.get('Content-Type');
// => "text/plain"

res.json()

Argumentos

body
Tipo: any | undefined

El valor a enviar como JSON. Puede ser cualquier tipo JSON: objeto, array, string, Boolean, número, o null.

status
Tipo: Number | undefined Obsoleto en: v4.2.0

El código de estado HTTP, aceptado como argumento posicional por las antiguas firmas res.json(obj, status) y res.json(status, obj). Usa res.status() en su lugar.

Envía una respuesta JSON. Este método envía una respuesta (con el content-type correcto) que es el parámetro convertido a un string JSON usando JSON.stringify().

El parámetro puede ser cualquier tipo JSON, incluyendo objeto, array, string, Boolean, número, o null, y también puedes usarlo para convertir otros valores a JSON.

res.json(null);
res.json({ user: 'tobi' });
res.status(500).json({ error: 'message' });

Precaución

La firma res.json(obj, status) ha quedado obsoleta desde Express v4.2.0 (y la invertida res.json(status, obj) desde v4.7.0). Establece el estado por separado y encadena la llamada en su lugar: res.status(status).json(obj).

Puedes actualizar tu código automáticamente con el siguiente codemod:

Ventana de terminal
npx codemod@latest @expressjs/status-send-order

res.jsonp()

Argumentos

body
Tipo: any | undefined

El valor a enviar como respuesta JSONP. Puede ser cualquier tipo JSON.

status
Tipo: Number | undefined Obsoleto en: v4.2.0

El código de estado HTTP, aceptado como argumento posicional por las antiguas firmas res.jsonp(obj, status) y res.jsonp(status, obj). Usa res.status() en su lugar.

Envía una respuesta JSON con soporte JSONP. Este método es idéntico a res.json(), excepto que opta por el soporte de callback JSONP.

res.jsonp(null);
// => callback(null)
res.jsonp({ user: 'tobi' });
// => callback({ "user": "tobi" })
res.status(500).jsonp({ error: 'message' });
// => callback({ "error": "message" })

Por defecto, el nombre del callback JSONP es simplemente callback. Sobrescribe esto con el

ajuste de nombre de callback jsonp.

Los siguientes son algunos ejemplos de respuestas JSONP usando el mismo código:

// ?callback=foo
res.jsonp({ user: 'tobi' });
// => foo({ "user": "tobi" })
app.set('jsonp callback name', 'cb');
// ?cb=foo
res.status(500).jsonp({ error: 'message' });
// => foo({ "error": "message" })

Precaución

La firma res.jsonp(obj, status) ha quedado obsoleta desde Express v4.2.0 (y la invertida res.jsonp(status, obj) desde v4.7.0). Establece el estado por separado y encadena la llamada en su lugar: res.status(status).jsonp(obj).

Puedes actualizar tu código automáticamente con el siguiente codemod:

Ventana de terminal
npx codemod@latest @expressjs/status-send-order

Argumentos

links
Tipo: Record<String, String>

Un objeto cuyas propiedades (como next y last) rellenan el header de respuesta Link.

Une los links proporcionados como propiedades del parámetro para rellenar el campo del header Link de la respuesta HTTP.

Por ejemplo, la siguiente llamada:

res.links({
next: 'http://api.example.com/users?page=2',
last: 'http://api.example.com/users?page=5',
});

Produce los siguientes resultados:

Link: <http://api.example.com/users?page=2>; rel="next",
<http://api.example.com/users?page=5>; rel="last"

res.location()

Argumentos

path
Tipo: String

La URL a establecer en el header Location.

Establece el header HTTP Location de la respuesta al parámetro path especificado.

res.location('/foo/bar');
res.location('http://example.com');
res.location('back');

Precaución

'back' quedó obsoleto en 4.21.0, usa req.get('Referrer') || '/' como argumento en su lugar.

Un valor de path de “back” tiene un significado especial, se refiere a la URL especificada en el header Referer de la petición. Si el header Referer no se especificó, se refiere a ”/”.

Consulta también Mejores prácticas de seguridad: Prevenir vulnerabilidades de redirección abierta.

Advertencia

Después de codificar la URL, si no estaba ya codificada, Express pasa la URL especificada al navegador en el header Location, sin ninguna validación.

Los navegadores asumen la responsabilidad de derivar la URL prevista a partir de la URL actual o la URL de referencia, y la URL especificada en el header Location; y redirigen al usuario en consecuencia.

res.redirect()

Argumentos

status
Tipo: Number | undefined

El código de estado HTTP a usar. Por defecto es 302 (Found).

path
Tipo: String

La URL a la que redirigir.

Redirige a la URL derivada del path especificado, con el status especificado, un entero positivo que corresponde a un código de estado HTTP . Si no se especifica, status usa por defecto “302 “Found”.

res.redirect('/foo/bar');
res.redirect('http://example.com');
res.redirect(301, 'http://example.com');
res.redirect('../login');

Precaución

La firma invertida res.redirect(path, status) (status como segundo argumento) ha quedado obsoleta desde Express v4.6.0. Usa res.redirect(status, path) en su lugar.

Puedes actualizar tu código automáticamente con el siguiente codemod:

Ventana de terminal
npx codemod@latest @expressjs/redirect-arg-order

Las redirecciones pueden ser una URL completa para redirigir a un sitio diferente:

res.redirect('https://google.com');

Las redirecciones pueden ser relativas a la raíz del nombre del host. Por ejemplo, si la aplicación está en http://example.com/admin/post/new, lo siguiente redirigiría a la URL http://example.com/admin:

res.redirect('/admin');

Las redirecciones pueden ser relativas a la URL actual. Por ejemplo, desde http://example.com/blog/admin/ (nótese la barra final), lo siguiente redirigiría a la URL http://example.com/blog/admin/post/new.

res.redirect('post/new');

Redirigir a post/new desde http://example.com/blog/admin (sin barra final), redirigirá a http://example.com/blog/post/new.

Si el comportamiento anterior te resulta confuso, piensa en los segmentos de ruta como directorios (con barras finales) y archivos, y empezará a tener sentido.

Las redirecciones relativas a la ruta también son posibles. Si estuvieras en http://example.com/admin/post/new, lo siguiente redirigiría a http://example.com/admin/post:

res.redirect('..');

Una redirección back redirige la petición de vuelta al referer, usando por defecto / cuando falta el referer.

res.redirect('back');

Precaución

La redirección back quedó obsoleta en 4.21.0, usa req.get('Referrer') || '/' como argumento en su lugar.

Consulta también Mejores prácticas de seguridad: Prevenir vulnerabilidades de redirección abierta.

res.render()

Argumentos

view
Tipo: String

La ruta del archivo de la vista a renderizar (absoluta o relativa al ajuste views).

locals
Tipo: Object | undefined

Un objeto cuyas propiedades definen variables locales para la vista.

callback
Tipo: Function | undefined

Se llama como callback(err, html). Cuando se proporciona, el HTML renderizado no se envía automáticamente.

Renderiza una view y envía el string HTML renderizado al cliente. Parámetros opcionales:

  • locals, un objeto cuyas propiedades definen variables locales para la vista.
  • callback, una función de callback. Si se proporciona, el método devuelve tanto el posible error como el string renderizado, pero no realiza una respuesta automatizada. Cuando ocurre un error, el método invoca next(err) internamente.

El argumento view es un string que es la ruta del archivo de la vista a renderizar. Puede ser una ruta absoluta, o una ruta relativa al ajuste views. Si la ruta no contiene una extensión de archivo, entonces el ajuste view engine determina la extensión del archivo. Si la ruta contiene una extensión de archivo, entonces Express cargará el módulo para el motor de plantillas especificado (mediante require()) y lo renderizará usando la función __express del módulo cargado.

Para más información, consulta Uso de motores de plantillas con Express.

Advertencia

El argumento view realiza operaciones del sistema de archivos como leer un archivo del disco y evaluar módulos de Node.js, y por razones de seguridad no debería contener entrada del usuario final.

Advertencia

El objeto locals es usado por los motores de vistas para renderizar una respuesta. Las claves del objeto pueden ser particularmente sensibles y no deberían contener entrada controlada por el usuario, ya que puede afectar el funcionamiento del motor de vistas o proporcionar un vector para cross-site scripting. Consulta la documentación del motor de vistas usado para consideraciones adicionales.

Precaución

La variable local cache habilita el caché de vistas. Establécela a true para cachear la vista durante el desarrollo; el caché de vistas está habilitado en producción por defecto.

// send the rendered view to the client
res.render('index');
// if a callback is specified, the rendered HTML string has to be sent explicitly
res.render('index', function (err, html) {
res.send(html);
});
// pass a local variable to the view
res.render('user', { name: 'Tobi' }, function (err, html) {
// ...
});

res.send()

Argumentos

body
Tipo: String | Buffer | Object | Array | Boolean | undefined

El cuerpo de la respuesta. Los strings se envían como HTML; los objetos y arrays como JSON; los Buffers como binario.

status
Tipo: Number | undefined Obsoleto en: v4.5.0

El código de estado HTTP, aceptado como argumento posicional por las antiguas firmas res.send(body, status), res.send(status, body), y res.send(status). Usa res.status() o res.sendStatus() en su lugar.

Envía la respuesta HTTP.

El parámetro body puede ser un objeto Buffer, un String, un objeto, un Boolean, o un Array. Por ejemplo:

res.send(Buffer.from('whoop'));
res.send({ some: 'json' });
res.send('<p>some html</p>');
res.status(404).send('Sorry, we cannot find that!');
res.status(500).send({ error: 'something blew up' });

Este método realiza muchas tareas útiles para respuestas simples que no son streaming: Por ejemplo, asigna automáticamente el campo del header de respuesta HTTP Content-Length (a menos que se haya definido previamente) y proporciona soporte automático de HEAD y frescura de caché HTTP.

Cuando el parámetro es un objeto Buffer, el método establece el campo del header de respuesta Content-Type a “application/octet-stream”, a menos que se haya definido previamente como se muestra abajo:

res.set('Content-Type', 'text/html');
res.send(Buffer.from('<p>some html</p>'));

Cuando el parámetro es un String, el método establece Content-Type a “text/html”:

res.send('<p>some html</p>');

Cuando el parámetro es un Array o un Object, Express responde con la representación JSON:

res.send({ user: 'tobi' });
res.send([1, 2, 3]);

Precaución

Las firmas res.send(body, status) y res.send(status) han quedado obsoletas desde Express v4.5.0 (la invertida res.send(status, body) desde v4.7.0). Para establecer el estado, encadena la llamada: res.status(status).send(body). Para enviar solo un código de estado, usa res.sendStatus(). Si necesitas enviar un número como cuerpo, conviértelo a string primero (por ejemplo, res.send(String(123))) para que no se interprete como un código de estado.

Puedes actualizar tu código automáticamente con el siguiente codemod:

Ventana de terminal
npx codemod@latest @expressjs/status-send-order

res.sendFile()

Argumentos

path
Tipo: String

La ruta al archivo a transferir. Debe ser absoluta a menos que se establezca la opción root.

options
Tipo: Object | undefined

Opciones para servir el archivo.

maxAge
Tipo: Number | String Por defecto: 0

Establece la propiedad max-age del header Cache-Control en milisegundos, o un string en formato ms.

root
Tipo: String

Directorio raíz para nombres de archivo relativos.

lastModified
Tipo: Boolean Por defecto: true

Establece el header Last-Modified a la fecha de última modificación del archivo en el SO. Establece false para deshabilitarlo.

headers
Tipo: Object

Objeto que contiene headers HTTP para servir con el archivo.

dotfiles
Tipo: String Por defecto: "ignore"

Opción para servir dotfiles. Los valores posibles son "allow", "deny", y "ignore".

acceptRanges
Tipo: Boolean Por defecto: true

Habilita o deshabilita la aceptación de peticiones con rango.

cacheControl
Tipo: Boolean Por defecto: true

Habilita o deshabilita el establecimiento del header de respuesta Cache-Control.

immutable
Tipo: Boolean Por defecto: false

Habilita o deshabilita la directiva immutable en el header de respuesta Cache-Control. Si se habilita, la opción maxAge también debe especificarse para habilitar el caché.

fn
Tipo: Function | undefined

Callback fn(err) invocado cuando la transferencia se completa o ocurre un error.

Transfiere el archivo en la path dada. Establece el campo del header HTTP de respuesta Content-Type basándose en la extensión del nombre del archivo. A menos que la opción root esté establecida en el objeto de opciones, path debe ser una ruta absoluta al archivo.

Advertencia

Esta API proporciona acceso a datos del sistema de archivos en ejecución. Asegúrate de que (a) la forma en que se construyó el argumento path en una ruta absoluta es segura si contiene entrada del usuario o (b) establece la opción root a la ruta absoluta de un directorio para contener el acceso dentro de él.

Cuando se proporciona la opción root, el argumento path puede ser una ruta relativa, incluso conteniendo ... Express validará que la ruta relativa proporcionada como path se resolverá dentro de la opción root dada.

El método invoca la función de callback fn(err) cuando la transferencia se completa o cuando ocurre un error. Si se especifica la función de callback y ocurre un error, la función de callback debe manejar explícitamente el proceso de respuesta ya sea finalizando el ciclo petición-respuesta, o pasando el control a la siguiente ruta.

Aquí hay un ejemplo de uso de res.sendFile con todos sus argumentos.

app.get('/file/:name', function (req, res, next) {
var options = {
root: path.join(__dirname, 'public'),
dotfiles: 'deny',
headers: {
'x-timestamp': Date.now(),
'x-sent': true,
},
};
var fileName = req.params.name;
res.sendFile(fileName, options, function (err) {
if (err) {
next(err);
} else {
console.log('Sent:', fileName);
}
});
});

El siguiente ejemplo ilustra el uso de res.sendFile para proporcionar soporte detallado para servir archivos:

app.get('/user/:uid/photos/:file', function (req, res) {
var uid = req.params.uid;
var file = req.params.file;
req.user.mayViewFilesFrom(uid, function (yes) {
if (yes) {
res.sendFile('/uploads/' + uid + '/' + file);
} else {
res.status(403).send("Sorry! You can't see that.");
}
});
});

Para más información, o si tienes problemas o dudas, consulta send.

res.sendfile()

Argumentos

path
Tipo: String

La ruta al archivo a transferir.

options
Tipo: Object | undefined

Opciones para servir el archivo. Además de las opciones aceptadas por res.sendFile(), las antiguas opciones hidden y from son soportadas (usa dotfiles y root en su lugar).

fn
Tipo: Function | undefined

Callback fn(err) invocado cuando la transferencia se completa o ocurre un error.

Precaución

res.sendfile() (en minúsculas) es la versión antigua de res.sendFile() y se comporta de forma idéntica. La versión en camelCase res.sendFile() se introdujo en Express v4.8.0, y res.sendfile() emite una advertencia de obsolescencia desde esa versión. Usa res.sendFile() en su lugar.

Puedes actualizar tu código automáticamente con el siguiente codemod:

Ventana de terminal
npx codemod@latest @expressjs/camelcase-sendfile

Transfiere el archivo en la path dada. Esta es la versión antigua en minúsculas de res.sendFile() y se comporta de la misma manera. Prefiere res.sendFile() en código nuevo.

res.sendStatus()

Argumentos

statusCode
Tipo: Number

El código de estado HTTP a establecer; su mensaje de estado registrado se convierte en el cuerpo de la respuesta.

Establece el código de estado HTTP de la respuesta a statusCode y envía el mensaje de estado registrado como cuerpo de respuesta de texto. Si se especifica un código de estado desconocido, el cuerpo de la respuesta será solo el número del código.

res.sendStatus(404);

Precaución

Algunas versiones de Node.js lanzarán un error cuando res.statusCode se establezca a un código de estado HTTP inválido (fuera del rango 100 a 599). Consulta la documentación del servidor HTTP para la versión de Node.js que se esté usando.

Más sobre códigos de estado HTTP

res.set()

Argumentos

field
Tipo: String | Object

El nombre del header, o un objeto de pares nombre/valor de header para establecer múltiples headers a la vez.

value
Tipo: String | String[] | undefined

El valor del header (cuando field es un string).

Establece el header HTTP field de la respuesta a value. Para establecer múltiples campos a la vez, pasa un objeto como parámetro.

res.set('Content-Type', 'text/plain');
res.set({
'Content-Type': 'text/plain',
'Content-Length': '123',
ETag: '12345',
});

Alias de res.header(field [, value]).

res.status()

Argumentos

code
Tipo: Number

El código de estado HTTP para la respuesta.

Establece el estado HTTP para la respuesta. Es un alias encadenable del response.statusCode de Node.

res.status(403).end();
res.status(400).send('Bad Request');
res.status(404).sendFile('/absolute/path/to/404.png');

res.type()

Argumentos

type
Tipo: String

El tipo MIME, o una extensión de archivo que se busca para obtener un tipo MIME. Si contiene /, se usa tal cual.

Establece el header HTTP Content-Type al tipo MIME determinado por el type especificado. Si type contiene el carácter ”/”, entonces establece Content-Type al valor exacto de type, de lo contrario se asume que es una extensión de archivo y el tipo MIME se busca en un mapeo usando el método express.static.mime.lookup().

res.type('.html');
// => 'text/html'
res.type('html');
// => 'text/html'
res.type('json');
// => 'application/json'
res.type('application/json');
// => 'application/json'
res.type('png');
// => 'image/png'

Alias de res.contentType(type).

res.vary()

Argumentos

field
Tipo: String

El nombre del campo de header a añadir al header de respuesta Vary.

Añade el campo al header de respuesta Vary, si no está ya presente.

res.vary('User-Agent').render('docs');