【问题标题】:How to submit a successful post request using the MEAN stack?如何使用 MEAN 堆栈提交成功的发布请求?
【发布时间】:2014-06-01 18:23:42
【问题描述】:

我正在使用 yeoman 来搭建一个项目。最后我想学习搭建CRUD。我被困在一个帖子请求上。我选择了angular-fullstack generator,因为我对普通的角度发生器非常满意。

在尝试向 Things 集合提交新对象时,我的发布请求尝试因 400 错误而受阻。我很迷茫,我需要查看使用此文件夹结构的发布请求的完整代码。

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

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

那么,使用 yeoman 的 angular-fullstack 生成器,我将如何在 mongo db 的 Thing 集合中发出 post 请求以创建 awesomeThing。

我肯定遗漏了一些东西,但我认为使 POST 请求成功所需的大部分内容如下所示。任何方向将不胜感激。

app/views/partials/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>

app/scripts/controllers/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/controllers/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/models/thing.js

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

我有一种预感,因为我的提交与架构不匹配,猫鼬会阻止它? ?还有其他想法吗?

【问题讨论】:

    标签: javascript node.js angularjs mongodb express


    【解决方案1】:

    编辑

    最后一个建议是基于查看我拥有的其他代码。试试这个来代替你的帖子

    $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) 被忽略。删除分号,它可能会开始工作。

    【讨论】:

    • 已修复!但仍然没有更新代码来参考我的进度
    • 我已经根据我的进度更新了代码。将 .post 请求更改为调用 api.create。我刚刚了解了更多关于这方面的知识,但我仍然收到 400 错误。
    • 仍然得到 400。我不认为这是 ng-model="var name" 的问题。但是,与 mongoose 模式不匹配的 ng-model 可能是问题的一部分。
    • 哈,你是对的。我已经编辑了我的代码和你的代码以反映正确的答案。非常感谢。
    • stackoverflow.com/questions/24088681/…无耻插件新问题;如果你能回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 2014-07-08
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多