Javascript 使用httpClient获取用户数据
我想获取用户数据,但总是得到null。这是我的路线: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
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)
}