首页 > 解决方案 > 为什么 NodeJS 中来自 Angular 的 GET 请求有时为空,尽管有数据

问题描述

我有时GETAngular. 我正在使用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);

标签: javascriptnode.jsangulartypescriptmongoose

解决方案


如果传入回调函数,Mongoose 将异步执行查询并将结果传递给回调。有时您没有得到数据,因为查询没有完成执行。要解决此问题,您可以将代码更改为:

let modelData = await ModelData.findOne({user: req.params.id});
if (!modelData)...

推荐阅读