Angular with Express:为什么我的PUT请求不会触发?

时间:2017-11-15 06:06:52

标签: angular express httprequest crud put

我的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);
      }
    }
  );
});

1 个答案:

答案 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.

我希望有所帮助 - 我也偶然发现了这一点。