Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

112
Vistas
Express app.use comportamiento de actualización

Estoy usando Express con Node.js y estoy bastante confundido acerca del comportamiento refrescante. Al actualizar /test , parece que algo se almacena en caché en el lado del servidor cuando llega a app.use porque la longitud de la matriz no es cero (consulte el código de muestra a continuación). Espero que la longitud de la matriz se restablezca a cero ya que estoy presionando /test nuevamente cuando estoy actualizando el navegador.

¿App.use almacena cosas en caché de forma predeterminada? ¿Cómo funciona el middleware Express en términos de actualización? No pude encontrar nada que explicara esto claramente en los documentos de Express 4.14.

==================

Punto final del navegador: localhost:8000/test

Cliente:

 $.get('/data').done(function(response){...}

Ruta:

 module.exports = function(app) { app.get('/test', function(req,res) { var arr =[]; app.use('/data', function(req,res, next) { console.log(arr.length); // this is nonzero on refresh arr.push(/* some stuff*/); res.send({"arr": arr}); } res.render('test.html') } }

Servidor:

 var express = require('express'); var app = express(); require('./routes/route')(app); app.set('views',__dirname + '/views'); app.set('view engine', 'ejs'); app.engine('html', require('ejs').renderFile); var server = app.listen(8000, function() { console.log("server started 8000"); }); app.use(express.static(__dirname + '/public'));
about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

No es realmente el almacenamiento en caché del servidor. Es porque está registrando un middleware dentro de un cierre y, por lo tanto, esas variables de cierre (como arr ) se conservan para la siguiente invocación del middleware. Además, está registrando el middleware una y otra vez (uno nuevo cada vez que se /test ).

Cuando registra app.use() dentro de app.get() , significa que cada vez que acceda a la ruta /test , agregará otro controlador duplicado app.use() . Se acumularán con el tiempo y el mismo middleware se ejecutará varias veces para la misma solicitud, conservando el valor anterior para arr desde que se registró originalmente, pero cada uno con su propio valor para esa matriz.

La solución general aquí es NO registrar app.use() dentro de app.get() porque solo desea un controlador, no desea que se acumulen.


No está claro qué está tratando de lograr con su app.use('/data/, ...) . Está claro que su estructura actual es incorrecta, pero sin comprender qué estaba tratando de hacer con eso, no está claro exactamente cómo debería escribirse. La función habitual del middleware es registrarse una vez durante la inicialización del servidor y nunca dentro de un controlador de solicitudes.


Si está tratando de responder a su llamada ajax:

 $.get('/data').done(function(response){...}

Entonces, querrás una app.get('/data', ...) en el nivel superior de tu módulo de app para que funcione.


Explique qué se supone que debe lograr arr.push() para que podamos ayudarlo con más detalle.

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda