首页 > 解决方案 > API中的Put方法总是收到空的请求体

问题描述

我已经构建了一个 NodeJS Restful API,除了一个之外,几乎每条路由都在工作。我有一个 Angular 前端,使用 httpClientModule 发送请求。

当我尝试对一个特定项目发出 put 请求时,该请求在到达服务器时为空。我有 3 条其他路线发出 put 请求,它们都工作正常。谁能解释这里发生了什么。我查看了其他一些讨论类似问题的线程,但没有一个问题与我的相同。我真的无法理解正在发生的事情。

这是一些相关的代码。提前致谢。

API方法

router.put("/api/login/:_id", passport.authenticate("jwt", { session: false }), (req, res) => {
  console.log(req.body)
  User.findById(req.params._id)
    .then((user) => {
      bcrypt.compare(req.body.password, user.password).then((isMatched) => {
        if (isMatched) {
          User.findByIdAndUpdate(_id, { password: req.body.password })
            .then(() => {
              res.sendStatus(200);
            })
            .catch((err) => {
              console.log("Password update error" + err);
            });
        } else {
          res.status(400);
        }
      });
    })
    .catch((err) => {
      console.log("Password Update Error" + err);
      res.status(400);
    });
});

角服务方法

newPassword(_id: any, password:any):Observable<any>
  {    
    return this.http.put(this.url+`/admin/api/login/${_id}`, password);
  }

标签: node.jsangular

解决方案


如果您将密码正文包装到请求的对象中怎么办?比方说:

newPassword(_id: any, password: any): Observable < any >
{
    return this.http.put(this.url + `/admin/api/login/${_id}`, {password});
}

这样,body 就包含了一个password属性。


推荐阅读