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

468
Views
Pasar variable global a otro archivo de controlador en Node.js

Creé una variable global (userEmail) que contiene el valor del usuario actual. La solicitud posterior maneja la autorización y asigna el correo electrónico del usuario actual a esa variable global. El problema surge al exportar esa variable global (correo electrónico de usuario) a otro archivo. Otro archivo lo lee como 'no asignado', tal vez porque module.export se ejecuta antes que route.post. ¿Cuál puede ser la solución para que la variable global en otro archivo sea alterada por la asignación de route.post al usuario actual?

 var userEmail = 'not assigned'; route.get('/', (req, res) => { res.render('signIn'); }) route.post('/', (req, res) => { let email = req.body["sign-in-email"]; let password = req.body["sign-in-password"]; let errorMessage = ''; userModel.findOne({ 'email': email }, 'email password balance', function (err, user) { if (err) return handleError(err); if (email == user.email) { if (bcrypt.compareSync(password, user.password)) { // function returns true if password matched the database hashed password userEmail = user.email; exports = {userEmail}; res.render('dashboard', { email: userEmail , balance: user.balance}) console.log(userEmail) } else { errorMessage = 'Invalid password' res.render('home', { errorMessage: errorMessage }); }; } else { errorMessage = 'User Not Found' res.render('home', { errorMessage: errorMessage }); } }); }) module.exports = {route, userEmail};
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

NodeJS tiene una variable global que puede usar para administrar valores globales. Aquí hay una muestra de la variable global. Si tiene una clase de registrador y desea tener su instancia globalmente en su entorno, puede hacer lo siguiente:

 global.logger = new Logger()
about 4 years ago · Juan Pablo Isaza Report

0

Creé una variable global (userEmail) que contiene el valor del usuario actual.

Este es tu primer problema. No existe tal cosa como el "usuario actual". Puede haber varios usuarios que realicen solicitudes a su servidor http y cuyas solicitudes estén en proceso.

No puede mantener el estado específico de la solicitud o el estado específico del usuario en las variables globales. Agregue ese estado de información al objeto req para la solicitud para que otras partes del procesamiento de la solicitud puedan acceder desde allí (eso es lo que hace el middleware), agréguelo a una sesión de usuario que esté vinculada a un usuario específico y accesible desde cualquier solicitud de ese usuario o pasar ese estado a cualquier función que pueda necesitarlo mientras procesa la respuesta para una solicitud específica.

No puede poner un estado específico del usuario en una variable global. Múltiples solicitudes de diferentes usuarios sobrescribirán el estado global y se mezclarán entre las solicitudes de diferentes usuarios.


Por separado, esta estructura:

 module.exports = {route, userEmail};

exporta el valor actual de userEmail en el momento en que se inicializa el módulo (que será 'no asignado' en su código). A medida que cambia el valor de su variable userEmail , la exportación nunca cambia. Entonces, además del hecho de que esta no es la estructura correcta para una variable específica de solicitud (como se explicó anteriormente), tampoco puede exportar algo como esto.


En su situación específica, parece que desea que el valor userEmail esté disponible para futuras solicitudes de ese usuario. Hay varias formas de hacerlo, pero recomendaría usar express-session rápida y agregar el userEmail del usuario al objeto de la sesión de ese usuario. Ese objeto de sesión se vinculará a las solicitudes de ese usuario específico (a través de un identificador de sesión almacenado en una cookie) y los datos en el objeto de sesión del usuario estarán disponibles con todas las solicitudes futuras de ese usuario (dentro del límite de tiempo configurado de la cookie de sesión). ).

about 4 years ago · Juan Pablo Isaza 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!