路线正在从邮递员工作,但它不是从客户端工作

时间:2016-07-14 00:28:03

标签: angularjs node.js

我正在尝试修复400:错误请求错误。当我从Postman see image提出PUT请求时,我获得了200的成功。但是,当我从浏览器尝试路由时,它给了我400.

  

angular.js:11881 PUT   http://localhost:8000/api/users/addStock/578430b65bd7a5dca37bf2e5 400   (错误请求)

     

错误:对象{data:对象,状态:400,config:对象,statusText:   "错误请求"}

stock.html

<form ng-submit='addStock()'>
    <input type="text" ng-model='addObj.symbol' placeholder="symbol" required>
    <button class="btn btn-success">Add</button>
</form>

controller.js

app.controller('stockCtrl', function($scope,User){
    $scope.addStock = () => {
        let userId = '578430b65bd7a5dca37bf2e5';
        User.addStock(userId, $scope.addObj.symbol)
          .then(res => {
            console.log("res.data: ", res.data);
          })
          .catch(err => {
            console.log("err: ", err);
          })
    }

service.js

app.service('User', function($http) {
    this.addStock = (id, symbol) => {
      return $http.put(`/api/users/addStock/${id}`, symbol);
    }
}

路由/ API / users.js

router.put('/addStock/:userId',(req,res)=>{

  User.findById(req.params.userId, (err, user)=>{
    if(err || !user) return res.status(400).send(err || {error: 'user not found'});

    let stock = {
      symbol : req.body.symbol
    }
    user.stocks.push(stock);
    user.save((err, savedStock)=>{
      res.status(err ? 400 : 200).send(err || savedStock);
    })
  })
})

如果有人可以帮助我。我会非常感激的。非常感谢你。

1 个答案:

答案 0 :(得分:1)

总结我上面的评论......

symbol只是一个字符串。看起来您应该在$http调用中使用带有“符号”键的对象,即

return $http.put(`/api/users/addStock/${id}`, {symbol: symbol});

此外,Angular默认将数据发送为application/json,而邮递员示例似乎正在提交application/x-www-form-urlencoded。要处理任何类型的请求正文,您需要

app.use(bodyParser.json());

如果你还没有。见https://expressjs.com/en/api.html#req.body