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

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

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 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!