如何使用MEAN堆栈提交成功的发布请求?

时间:2014-06-01 18:23:43

标签: javascript node.js angularjs mongodb express

我正在使用自耕农来支撑一个项目。最后,我想学习如何构建CRUD。我被困在邮寄请求上了。我选择了angular-fullstack generator,因为我对普通角度发生器非常熟悉。

尝试向Things集合提交新对象时,我的帖子请求尝试被400错误所取消。我很丢失,我需要使用此文件夹结构查看完整的帖子请求代码。

更新 然而,400错误消失了,req.body。

UPDATE2: 一切正常,现在答案都在我的代码和答案中。

所以,使用yeoman的angular-fullstack生成器,如何在mongo db的Thing集合中创建一个awesomeThing的post请求。

我肯定错过了一些东西,但我认为发布POST请求成功所需的大部分内容如下所示。任何方向都会非常感激。

应用/视图/分音/ main.html中

<div class="row marketing">
  <div ng-repeat="thing in awesomeThings">
      <h4>{{thing.name}}</h4>
      <p>{{thing.info}}</p>
  </div>
</div>    
<form ng-submit="addAwesome()">
        <input type="text" ng-model="tempAwesome.name">
        <input type="submit" class="btn btn-primary" value="Add">
</form>

应用/脚本/控制器/ main.html中

$scope.name = [];
$http.get('/api/awesomeThings').success(function(awesomeThings) {
      $scope.awesomeThings = awesomeThings;
    });
$scope.addAwesome = function() {
      $http.post('/api/awesomeThings', $scope.tempAwesome).success(function(postData) {
        $scope.awesomeThings = postData;

      }).error(function(postData, status){
          console.log(postData);
          $scope.status = status;
          console.log(status);
      });

    };

LIB / routes.js

  app.route('/api/awesomeThings')
    .get(api.awesomeThings)
    .post(api.create);

LIB /控制器/ api.js

mongoose.model('Thing', ThingSchema);

  exports.create = function (req, res) {

  var awesomeThing = new Thing(req.body);
  awesomeThing.save(function(err) {
     if (err) return res.json(400, err);
   });
  };

LIB /模型/ thing.js

var ThingSchema = new Schema({
  name: String,
  info: String,
  awesomeness: Number
});

我有预感它是mongoose阻止这个因为我的提交不符合架构? ?还有其他想法吗? enter image description here

1 个答案:

答案 0 :(得分:2)

修改

好的最后一个建议是基于查看我的其他代码。试试这个帖子

$http.post('/api/awesomeThings' { name : $scope.name })

根据代码更改进行修改

将表单中的ng-model更改为。

<input type="text" ng-model="name">

我认为这一行失败了

var awesomeThing = new Thing(req.body);

我认为正在发生的是你正在发送一个在体内看起来像这样的物体

{ tempThing: "sometext" }

当mongoose尝试创建你的对象时,它没有一个名为tempThing的属性,所以它就会失败。如果您愿意,可以通过在架构上设置{strict:false}来覆盖它,但是,如果您打算从表单中设置名称,我将从更改tempThing开始命名。

旧答案

我认为你的/lib/routes.js有拼写错误。你有一个 ';'在.get(api.awesomeThings)之后

导致.post(api.awesomeThings)被忽略。删除分号,它可能会开始工作。