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 El nombre del header de respuesta HTTP al que añadir.
value 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 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/pngres.clearCookie()
Argumentos
name El nombre de la cookie a borrar.
options 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 El nombre de la cookie.
value El valor de la cookie; un objeto se serializa como JSON.
options Opciones para el header Set-Cookie.
domain Nombre de dominio para la cookie. Por defecto es el nombre de dominio de la aplicación.
encode Una función síncrona usada para la codificación del valor de la cookie. Por defecto es encodeURIComponent.
expires 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 Marca la cookie para que sea accesible solo por el servidor web.
maxAge Opción conveniente para establecer el tiempo de expiración relativo al tiempo actual en milisegundos.
path Ruta para la cookie. Por defecto es ”/”.
partitioned Indica que la cookie debe almacenarse usando almacenamiento particionado. Consulta CHIPS para más detalles.
priority Valor del atributo “Priority” de Set-Cookie.
secure Marca la cookie para usarse solo con HTTPS.
signed Indica si la cookie debe firmarse.
sameSite 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 encodingres.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 encodingres.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 La ruta al archivo a transferir. Si es relativa, se resuelve contra el directorio de trabajo actual o la opción root.
filename El nombre del archivo para el parámetro “filename=” de Content-Disposition; sobrescribe el nombre derivado de path.
options Opciones enviadas a res.sendFile().
maxAge Establece la propiedad max-age del header Cache-Control en milisegundos, o un string en formato ms.
root Directorio raíz para nombres de archivo relativos.
lastModified Establece el header Last-Modified a la fecha de última modificación del archivo en el SO. Establece false para deshabilitarlo.
headers Objeto que contiene headers HTTP para servir con el archivo.
dotfiles Opción para servir dotfiles. Los valores posibles son "allow", "deny", y "ignore".
acceptRanges Habilita o deshabilita la aceptación de peticiones con rango.
cacheControl Habilita o deshabilita el establecimiento del header de respuesta Cache-Control.
immutable 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 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 Datos a escribir antes de finalizar la respuesta.
encoding La codificación para data cuando es un string.
callback 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 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 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 El valor a enviar como JSON. Puede ser cualquier tipo JSON: objeto, array, string, Boolean, número, o null.
status 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:
npx codemod@latest @expressjs/status-send-orderyarn dlx codemod@latest @expressjs/status-send-orderpnpm dlx codemod@latest @expressjs/status-send-orderbunx codemod@latest @expressjs/status-send-orderres.jsonp()
Argumentos
body El valor a enviar como respuesta JSONP. Puede ser cualquier tipo JSON.
status 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=foores.jsonp({ user: 'tobi' });// => foo({ "user": "tobi" })
app.set('jsonp callback name', 'cb');
// ?cb=foores.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:
npx codemod@latest @expressjs/status-send-orderyarn dlx codemod@latest @expressjs/status-send-orderpnpm dlx codemod@latest @expressjs/status-send-orderbunx codemod@latest @expressjs/status-send-orderres.links()
Argumentos
links 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 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 El código de estado HTTP a usar. Por defecto es 302 (Found).
path 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:
npx codemod@latest @expressjs/redirect-arg-orderyarn dlx codemod@latest @expressjs/redirect-arg-orderpnpm dlx codemod@latest @expressjs/redirect-arg-orderbunx codemod@latest @expressjs/redirect-arg-orderLas 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 La ruta del archivo de la vista a renderizar (absoluta o relativa al ajuste views).
locals Un objeto cuyas propiedades definen variables locales para la vista.
callback 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 invocanext(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 clientres.render('index');
// if a callback is specified, the rendered HTML string has to be sent explicitlyres.render('index', function (err, html) { res.send(html);});
// pass a local variable to the viewres.render('user', { name: 'Tobi' }, function (err, html) { // ...});res.send()
Argumentos
body El cuerpo de la respuesta. Los strings se envían como HTML; los objetos y arrays como JSON; los Buffers como binario.
status 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:
npx codemod@latest @expressjs/status-send-orderyarn dlx codemod@latest @expressjs/status-send-orderpnpm dlx codemod@latest @expressjs/status-send-orderbunx codemod@latest @expressjs/status-send-orderres.sendFile()
Argumentos
path La ruta al archivo a transferir. Debe ser absoluta a menos que se establezca la opción root.
options Opciones para servir el archivo.
maxAge Establece la propiedad max-age del header Cache-Control en milisegundos, o un string en formato ms.
root Directorio raíz para nombres de archivo relativos.
lastModified Establece el header Last-Modified a la fecha de última modificación del archivo en el SO. Establece false para deshabilitarlo.
headers Objeto que contiene headers HTTP para servir con el archivo.
dotfiles Opción para servir dotfiles. Los valores posibles son "allow", "deny", y "ignore".
acceptRanges Habilita o deshabilita la aceptación de peticiones con rango.
cacheControl Habilita o deshabilita el establecimiento del header de respuesta Cache-Control.
immutable 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 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 La ruta al archivo a transferir.
options 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 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:
npx codemod@latest @expressjs/camelcase-sendfileyarn dlx codemod@latest @expressjs/camelcase-sendfilepnpm dlx codemod@latest @expressjs/camelcase-sendfilebunx codemod@latest @expressjs/camelcase-sendfileTransfiere 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 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 El nombre del header, o un objeto de pares nombre/valor de header para establecer múltiples headers a la vez.
value 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 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 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 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');