Estoy tratando de pensar en una solución para el siguiente problema: tengo una variable que debe estar separada para cada visitante único en la página. Es una lista simple que se completa cuando un visitante hace clic en algunos elementos de la página. Estaría vacío para cada visita única. Actualmente lo mantengo en el backend, es una solución bastante mala ya que todos los que usan la aplicación actualmente se agregan a la misma lista
El código de fondo:
thelist=[] app.get("/show/:id", function (req, res) { var id = req.params.id; thelist.push(id) console.log(thelist); res.redirect('/') }); app.get("/run", function(req, res) { res.render("data", {data: thelist}) thelist = [] }); El punto principal es que la lista se pasa luego a un script de python que también está conectado a través de thelist a la aplicación. Por lo tanto, necesito que la variable permanezca en el backend. También estaba pensando en mantenerlo simple, por lo que no quiero obligar a los usuarios a crear una cuenta para usar la aplicación, por lo que lo que estoy buscando es algún tipo de cookies/caché/cualquier otra forma de almacenamiento de sesión.
Puede crear un mapa de sesión (como hashmaps). Lo he integrado en uno de mis proyectos y funciona perfectamente. A continuación se muestra el código y cómo puede acceder a él:
hashmap.js
var hashmapSession = {}; exports.auth = auth = { set : function(key, value){ hashmapSession[key] = value; }, get : function(key){ return hashmapSession[key]; }, delete : function(key){ delete hashmapSession[key]; }, all : function(){ return hashmapSession; } };aplicación.js
var hashmap = require('./hashmap'); var testObj = { id : 1, name : "john doe" }; hashmap.auth.set('test', testObj); hashmap.auth.get('test'); hashmap.auth.all(); hashmap.auth.delete('test');Puede usar este enfoque como almacenamiento de sesión para su aplicación de nodo. Tenga en cuenta que este almacenamiento solo será persistente para la sesión actual.
La mejor solución aquí sería una sesión expresa ( https://github.com/expressjs/session )
Cuando veo su código, puedo darme cuenta de que está usando express . Y si está utilizando express, eso es suficiente para el siguiente código.
Ejemplo:
app.set('oneSetting', 'one'); console.log(app.settings.oneSetting);O
app.set('port', 3000); app.get('port'); //3000También puede acceder a las mismas variables en el objeto req, ejemplo:
req.app.get('port')¿Por qué no usas la sesión expresa?
Puedes usarlo de la siguiente manera:
Aplicación.js
var app = express(); app.use(session({ secret: 'keyboard cat', resave: false, saveUninitialized: true, cookie: { secure: true } }))Controlador.js
//Sets the id in the session object. app.get('/show/:id', function (request, response, next) { request.session.id = id; }) //Retrieve the id from the session object. app.get('/showMyId',function(request,response,next)){ response.send(request.session.id;); })De esta manera, no tiene que administrar la lista global y todas sus identificaciones estarían presentes dentro de su respectivo objeto de sesión.
Este enfoque utiliza una sesión de cookies, también hay estrategias alternativas disponibles para almacenar su objeto de sesión como un servidor de almacenamiento adecuado.