javascript - 为什么 NodeJS 中来自 Angular 的 GET 请求有时为空,尽管有数据
问题描述
我有时GET
对Angular
. 我正在使用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);
解决方案
如果传入回调函数,Mongoose 将异步执行查询并将结果传递给回调。有时您没有得到数据,因为查询没有完成执行。要解决此问题,您可以将代码更改为:
let modelData = await ModelData.findOne({user: req.params.id});
if (!modelData)...
推荐阅读
- wso2 - 如何在 WSO2 Docker 版本中启用分析仪表板?
- firebase - Firebase 实时数据库 - 休息 API - 分页
- mongodb - Springboot Rest api 请求超时或在一定时间内未处理请求时取消
- angular - 在输出 html 代码中删除 CSS - kolkov/angular-editor
- arrays - 数组递归
- swift - Swift - 为 Jazzy 添加 xcodebuild 参数
- django - 将 www 重定向到 root (Django WSGI LetsEncrypt) 失败 - 未找到
- c++ - 如何将 const wchar_t 类型转换为 LPTSTR (C++)
- python - 在 Class 中存储表格数据
- laravel - Axios 请求已被 cors 阻止,请求的资源上不存在“Access-Control-Allow-Origin”标头