Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.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 为什么NodeJS中来自Angular的GET请求有时会显示为null,尽管存在数据_Javascript_Node.js_Angular_Typescript_Mongoose - Fatal编程技术网

Javascript 为什么NodeJS中来自Angular的GET请求有时会显示为null,尽管存在数据

Javascript 为什么NodeJS中来自Angular的GET请求有时会显示为null,尽管存在数据,javascript,node.js,angular,typescript,mongoose,Javascript,Node.js,Angular,Typescript,Mongoose,我有时对Angular中的GET请求有点小问题。 我正在使用ReplaySubject并返回可观察的,但有时在重新加载应用程序时,get请求它正在工作,但它正在获取null数据或消息无内容,尽管有数据。 在3-4次尝试中,它会显示数据。 请求get有效,但有时为空,有时为我提供数据 有人能帮我吗? 如果可能的话,我想使用ReplaySubject或者类似的东西,因为每次我都需要重新加载页面来获取新数据 这是我的前端部分 export class ModelDataService { publ

我有时对
Angular
中的
GET
请求有点小问题。 我正在使用
ReplaySubject
并返回
可观察的
,但有时在重新加载应用程序时,
get
请求它正在工作,但它正在获取
null
数据或消息
无内容
,尽管有数据。 在3-4次尝试中,它会显示数据。 请求
get
有效,但有时为空,有时为我提供数据

有人能帮我吗? 如果可能的话,我想使用
ReplaySubject
或者类似的东西,因为每次我都需要重新加载页面来获取新数据

这是我的
前端部分

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);
  }
}
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);
这是
后端部分

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);
  }
}
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)...

如果传入回调函数,Mongoose将异步执行查询,并将结果传递给回调函数。有时,由于查询尚未完成,因此无法获取数据。要解决此问题,您可以将代码更改为:

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

这是可行的,但与
ReplaySubject
一样,当我更新某些内容时,它正在更新后端,但我需要重新加载页面以查看更改。你知道吗?对不起。我不熟悉正在工作的
ReplaySubject
,但是当我更新一些东西时,它正在更新后端,但我需要重新加载页面以查看更改。你知道吗?对不起。我不熟悉
ReplaySubject