从角度4应用程序接收时表达接收空请求正文

时间:2018-02-01 11:39:47

标签: javascript angularjs node.js angular express

根据我快速路线中的req.body,正在发送的请求正文为空。

我的主节点文件如下 -

app.post('/signup', function(req,res,next){

if (!req.body||req.body=={}){
    return res.status(400).send("Bad Request")
}

var user = new User(req.body);

user.password = bcrypt.hashSync(req.body.password, 10);

User.create(user, function(err,new_user){
    if (err) {
        console.log('A Big Error');
        return res.status(500).send("There was a problem registering the user.")
    }

   //success code       

  })
});

auth.routes文件有注册路由,这是req.body是空的,但它没有点击检查的if语句,但是当我在console.log(re.body)时,它给了我 - {}

signup(user:User):Observable<boolean>{

return this.http.post(this.signup_url,JSON.stringify(user), 
  {
    headers: new HttpHeaders().set('Accept', "application/json;q=0.9,*/*;q=0.8").set('Content-Type', "x-www-form-encoded")
  })
  .map((response: Response) => {
      if(response){
        if(response.json() && response.json().token&&response.json().user&&response.json().expires){
          this.setSession(response.json());
          return true;
        }
        else{
           return false;
        }  
      }
      else{
          return false;
      }
  });
}

来自angular 4应用程序的请求是

this.http.get('https://maps.googleapis.com/maps/api/place/autocomplete/json?input=Vict&types=geocode&key=YOUR_API_KEY').subscribe(response=>{
console.log(response.json());
});

我确信Angular 4应用程序正在向服务器发送正确的数据并且它不是空的 - 检查了chromes网络请求正文。

我尝试过以下链接但没有效果。

Express app empty request body with custom content type headers

Express receiving empty object

Node.js: Receiving empty body when submitting form

还尝试了邮递员,结果是一样的 - 这意味着问题来自快递服务器而不是客户端。

1 个答案:

答案 0 :(得分:3)

没有必要对发布的数据进行字符串化,body-parser中间件将负责将数据解析为对象:

return this.http.post(this.signup_url, user, { ... }).map( ... );

另一件事,在post处理程序中,您可能希望使用.save()方法而不是.create(),因为您已经创建了一个模型实例,请记住,.save()方法可用于模型实例,而直接从模型调用.create()并将对象作为第一个参数

使用.save()方法

示例

app.post('/signup', function(req,res,next) {

    if (!req.body){
        return res.status(400).send("Bad Request");
    }

    var user = new User(req.body);

    var salt = bcrypt.genSaltSync(saltRounds);
    user.password = bcrypt.hashSync(req.body.password, salt);

    user.save(function( err ) {
        if (err) {
            console.log('A Big Error');
            return res.status(500).send("There was a problem registering the user.");
        }

        //success code       
        res.json({ success: true });
    })
});
使用.create()方法

示例

router.post('/signup', function(req,res,next){

    if (!req.body){
        return res.status(400).send("Bad Request")
    }

    var salt = bcrypt.genSaltSync(saltRounds);
    req.body.password = bcrypt.hashSync(req.body.password, salt);

    User.create ( req.body, function( err,  new_user) {
        if (err) {
            console.log('A Big Error');
            return res.status(500).send("There was a problem registering the user.")
        }

        //success code       
        res.json({ success: true });
    });
});