我的GET请求有效,但我的PUT请求似乎没有触发。它内部的功能肯定会运行,因为console.log语句显示在我的控制台中。 http PUT请求中的console.log语句不会显示在Google Chrome控制台或我的终端中。
角:
getCitiesSaved(): Observable<string[]> {
return this.http.get(this.url).map((data: Response) => {
this.currentCityList = data.json().cityAlerts;
return data.json().cityAlerts;
});
}
addCity(cityName) {
let cityArr = this.currentCityList;
cityArr.push(cityName);
const body = JSON.stringify({
id: this.userId,
cityAlerts: cityArr
});
const headers = new Headers({ 'Content-Type': 'application/json' });
console.log(body);
return this.http
.put(this.url, body, { headers: headers })
.map((response: Response) => {
console.log('http put request ran in frontend');
response.json();
})
.catch((error: Response) => {
this.errorService.handleSigninError(error.json());
return Observable.throw(error.json());
});
}
快递:
router.get('/users/:id', (req, res) => {
console.log('get user info');
User.findOne({
_id: req.params.id
}).exec((err, user) => {
if (err) {
return res.status(500).json({
title: 'An error occured',
error: err
});
} else {
console.log(user);
res.status(200).json(user);
}
});
});
router.put('/:users/:id', (req, res) => {
console.log('backend triggered');
User.findOneAndUpdate(
{
_id: req.params.id
},
{ $set: { cityAlerts: req.body.cityAlerts } },
{ upsert: true },
function(err, newCityAlert) {
if (err) {
console.log(err);
} else {
console.log(newCityAlert);
res.send(newCityAlert);
}
}
);
});
答案 0 :(得分:2)
在请求执行之前,您必须在您的observable上调用subscribe
。
您似乎需要在map
内将subscribe
更改为addCity()
。
来自文档:https://angular.io/guide/http
请注意subscribe()方法。从HttpClient返回的所有Observable都很冷,也就是说它们是提出请求的蓝图。在调用subscribe()之前不会发生任何事情,并且每个此类调用都会发出单独的请求。例如,此代码发送两次具有相同数据的POST请求:
他们的例子:
const req = http.post('/api/items/add', body);
// 0 requests made - .subscribe() not called.
req.subscribe();
// 1 request made.
req.subscribe();
// 2 requests made.
我希望有所帮助 - 我也偶然发现了这一点。