Soy muy nuevo en express.js, node.js. En nuestra aplicación, usamos la biblioteca zone.js para almacenar el valor ttl en la pila. Según tengo entendido, la zona solo se aplica por solicitud una vez que la respuesta se envía al usuario final. Después de esa zona morirá.
Pero lo que pase en mi caso, seguirá existiendo. Para un ejemplo:
En la primera solicitud, almacené el valor ttl en 150 usando la función storeTtl. y luego, mientras enviaba la respuesta, traté de obtener el valor usando la función getMinimumTtlVal. En respuesta, obtengo 150, eso es correcto porque la pila solo tiene un valor presente y antes de llamar a la solicitud de API de envío, debería estar vacío, pero eso no está sucediendo.
Cuando hice otra solicitud con el valor ttl 180 y almacené ttl usando la función storeTtl, pero cuando traté de obtener el valor en la función getMinimumTtlVal, ahora el satck tiene dos valores (150,180). Debido a la función min, devuelve 150.
Aquí se requiere la función Min, porque en alguna solicitud llamamos a la función storeTtl un par de veces. No puedo descifrar qué está mal en este código.
El código de muestra está a continuación:
require('zone.js/dist/zone-node.js'); class TtlStore { storeTtl (ttl) { if (!Zone.current.ttlStore) { Zone.current.ttlStore = []; } Zone.current.ttlStore.push(ttl); } getMinimumTtlVal () { const minValue = Math.min(...Zone.current.ttlStore); if (isNaN(minValue) || !Number.isInteger(minValue)) { return 0; } return minValue; } } module.exports = TtlStore;Gracias por adelantado
Nunca usé zone.js. Pero creo que se debe a que express no crea un nuevo hilo para cada solicitud y zone.js mantiene los valores para un hilo. Encontré otra pregunta sobre la lógica de subprocesos de nodejs y esto podría ser lo que está buscando . Si desea vaciar ttlStore por solicitud, puedo sugerirle que agregue un middleware que ejecute el final de la solicitud y borre su almacenamiento.