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