为啥 NodeJS 中来自 Angular 的 GET 请求有时为空,尽管有数据
Posted
技术标签:
【中文标题】为啥 NodeJS 中来自 Angular 的 GET 请求有时为空,尽管有数据【英文标题】:Why the GET request from Angular in the NodeJS sometimes come as null although there are data为什么 NodeJS 中来自 Angular 的 GET 请求有时为空,尽管有数据 【发布时间】:2021-02-20 06:44:53 【问题描述】:我有时对Angular
中的GET
请求有一点问题。
我正在使用ReplaySubject
并返回Observable
,但有时在重新加载应用程序时get
请求它正在工作,但它正在获取null
数据或消息No content
,尽管有数据。
在 3-4 次尝试中,它会显示数据。
请求 get
有效,但有时为空,有时给我数据。
有人可以帮助我吗?
如果可以给出任何想法使用ReplaySubject
或类似的东西,因为我每次都需要重新加载页面以获取新数据。
这是我的Frontend
部分。
export class ModelDataService
public baseUrl = environment.backend;
private data = new ReplaySubject<any>(1);
public userID = this.authService.userID;
constructor(private http: HttpClient, private authService: AuthService)
public getJSON()
return this.http.get(`$this.baseUrl/data/$this.userID`).subscribe(res => this.data.next(res));
public dataModel(): Observable<any>
return this.data.asObservable();
public setData(data: Model)
const api = `$this.baseUrl/data`;
const user_id = this.authService.userID;
this.http.post(api, data,
headers: user_id
).subscribe(res => this.data.next(res));
public updateDate(id: string, dataModel: Model)
const api = `$this.baseUrl/data/$id`;
return this.http.put(api, dataModel).subscribe(res => res);
这是我获取数据的component
ngOnInit()
this.authService.getUserProfile(this.userID).subscribe((res) =>
this.currentUser = res.msg;
);
this.modelDataService.getJSON();
this.model$ = this.modelDataService.dataModel();
this.model$.subscribe((test) =>
this.model = test;
);
this.model$.subscribe((test) =>
this.model = test;
);
这是backend
部分。
const ModelData = require("../models/data");
async show(req, res)
let modelData;
await ModelData.findOne(user: req.params.id, (error, user) =>
modelData = user;
);
if (!modelData)
res.status(204).json(error: "No Data");
return;
return res.status(200).send(modelData);
,
routes.get("/data/:id", ModelDataController.show);
routes.post("/data", ModelDataController.store);
routes.put("/data/:id", ModelDataController.update);
【问题讨论】:
【参考方案1】:如果你传入一个回调函数,Mongoose 会异步执行查询并将结果传递给回调。有时您没有得到数据,因为查询没有完成执行。要解决此问题,您可以将代码更改为:
let modelData = await ModelData.findOne(user: req.params.id);
if (!modelData)...
【讨论】:
这是有效的,但是当我更新某些内容时,ReplaySubject
也会发生同样的情况,它正在更新后端,但我需要重新加载页面才能看到更改。你有什么想法吗?
对不起。我不熟悉ReplaySubject
以上是关于为啥 NodeJS 中来自 Angular 的 GET 请求有时为空,尽管有数据的主要内容,如果未能解决你的问题,请参考以下文章
为啥我使用来自 Angular 服务的自签名证书调用 HTTPS API 时会出现此 ERR_CERT_AUTHORITY_INVALID 错误?