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

462
Vistas
Cómo funciona @Inject(REQUEST) y cómo desestructurarlo

La primera pregunta es cómo es posible que un parámetro inyectado cambie después de la inicialización de la clase. Porque este código funciona.

 export class AppService { constructor(@Inject(REQUEST) private request) {} myMethod() { console.log(this.request.user.userId); // userId exists } }

y este codigo no funciona

 export class AppService { private user; constructor(@Inject(REQUEST) request) { console.log(request) // it has request but no user in it this.user = request?.user?.userId; } myMethod() { console.log(this.user); // undefined } }

El segundo ejemplo aún no tiene 'userId', eso debería ser inyectado por mi interceptor nest.js. ¿Por qué es así si ambos fragmentos de código son idénticos? Incluso si la variable de solicitud solo apunta al objeto, ¿por qué no funciona en el segundo escenario? Todo lo que quiero es desestructurar el objeto de solicitud para obtener el ID de usuario de él.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Como se describe en esta pregunta , JavaScript generalmente se pasa por valor, excepto para los objetos que se pasan por referencia. Debido a esto, si una variable se asigna a un objeto, puede ver cambios en ese objeto más adelante, pero si se asigna a una primitiva de alguna manera (propiedad de un objeto en este caso), entonces no verá cuándo se obtiene esa propiedad. actualizado, porque se pasa solo por valor. Puede ver esto con un fragmento breve aquí (ejecútelo en un nodo REPL o en el navegador)

 const req = { foo: 'foo', fooBar: { foo: 'foo', bar: 'bar' } } const bar = req.bar; // undefined passed by value const fooBar = req.fooBar; // object passed by reference const fooBarFoo = req.fooBar.foo; // undefined passed by value req.bar = 'bar' req.fooBar.fooBar = 'fooBar' req.fooBar.foo = 'not foo' console.log(req) // original object console.log(bar) // still undefined console.log(fooBar) // full object, with fooBar property and "not foo" for foo property console.log(fooBarFoo) // still "foo"

Esto explica por qué en el constructor req.user (y las propiedades posteriores) no está undefined , pero en el método funciona bien.

Lo que puede hacer para poder usar this.user es crear un getter para su clase como

 export class AppService { constructor(@Inject(REQUEST) private request) {} get user() { return this.request.user.userId } myMethod() { console.log(this.user); // userId exists } }
about 4 years ago · Juan Pablo Isaza 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