Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

113
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!