Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用httpClient获取用户数据_Javascript_Angular_Get_Request_Httpclient - Fatal编程技术网

Javascript 使用httpClient获取用户数据

Javascript 使用httpClient获取用户数据,javascript,angular,get,request,httpclient,Javascript,Angular,Get,Request,Httpclient,我想获取用户数据,但总是得到null。这是我的路线: router.get('/user', (req,res)=>{ res.send(req.user); }) 我不想谈细节,但请继续http://localhost:4000/auth/user,当我登录时,我有我的用户数据 以下是我的web服务(“所有服务的框架”)获取部分: constructor(private http:HttpClient) { } get(uri:string) { return t

我想获取用户数据,但总是得到null。这是我的路线:

router.get('/user', (req,res)=>{ 
  res.send(req.user); 
})
我不想谈细节,但请继续http://localhost:4000/auth/user,当我登录时,我有我的用户数据

以下是我的web服务(“所有服务的框架”)获取部分:

constructor(private http:HttpClient) { }

  get(uri:string) {
    return this.http.get(`${this.devUri}/${uri}`)
  }
和AuthService(整个,因为它很短):

和包含此数据的组件:

import { Component, OnInit } from '@angular/core';
import { AuthService } from 'src/app/services/auth.service';

@Component({
  selector: 'app-public',
  templateUrl: './public.component.html',
  styleUrls: ['./public.component.css']
})
export class PublicComponent implements OnInit {

  user: any;
  constructor(private authService: AuthService) { }
  ngOnInit(): void {
    this.authService.getUser().subscribe( user => {
      this.user = user;
      console.log(user);
    })
  }

}

我确信,地址或输入错误没有问题,但我怀疑问题与异步有关,但我不知道如何解决它。

我认为这是服务器端代码问题,请尝试按以下方式更改

router.get('/user', (req,res)=>{ 
 res.status(200).json({
   result: true,
   user: 'Test result'
  });
});
在您的组件中,当onInit方法添加时,如下所示

import { Component, OnInit } from '@angular/core';
import { AuthService } from 'src/app/services/auth.service';

@Component({
  selector: 'app-public',
  templateUrl: './public.component.html',
  styleUrls: ['./public.component.css']
})
export class PublicComponent implements OnInit {

  user: any;
  constructor(private authService: AuthService) { }
  ngOnInit(): void {
    this.authService.getUser().subscribe( result => {
      let temp:any = result;
      this.user = temp.user;
      console.log(this.user);
    })
  }

}
希望这能奏效。快乐编码找到了解决方案:

在server.js中

app.use(
  cors({
    origin: "http://localhost:4200",
    credentials: true
  })
);
在webService.ts中:

const httpOptions = {
  headers: new HttpHeaders({
    'Content-Type': 'application/json'
  }),
  withCredentials: true 
}
get(uri:string) {
    return this.http.get(`${this.devUri}/${uri}`, httpOptions)
  }

它现在正在工作。

事实上,异步代码是正确的,这里只有一点点。查看开发工具的“网络”选项卡,验证来自服务器的响应是否包含数据。是否确保在服务器端启用了cors?您可以通过查看网络选项卡进行检查。构造函数(专用http:HttpClient){},将传递的HttpClient分配给此。http。类型“对象”上不存在属性“用户”。我得到的唯一结果是:当我控制台时为true。log(result)是是的是的,你在响应中正确放置了req.user,而不是req.user,它可能是req.body.user,你也可以尝试在用户响应中添加一个测试字符串,如hello world。现在它是未定义的。我找到了解决方案。我只需要启用凭据。见上面的答案。
const httpOptions = {
  headers: new HttpHeaders({
    'Content-Type': 'application/json'
  }),
  withCredentials: true 
}
get(uri:string) {
    return this.http.get(`${this.devUri}/${uri}`, httpOptions)
  }