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

好的,我正在使用yeoman来搭build一个项目。 最后我想学习支架CRUD。 我被卡在一个post请求。 我已经select了angular度全堆发生器,因为我对正常的angular发生器非常舒服。

当我试图向Things集合提交一个新对象时,我的post请求被尝试了400错误。 我很迷路,我需要使用这个文件夹结构看到一个发布请求的完整代码。

更新: 400错误消失,但是,req.body。

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

因此, 使用yeoman的angular-fullstack生成器,我将如何发出post请求,以在Mongo db的Thing集合中创build一个awesomeThing。

我肯定错过了一些东西,但是我认为大部分需要使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阻止这个,因为我的提交不符合架构? ? 任何其他的想法? 在这里输入图像说明

编辑

确定最后一个build议是基于查看我拥有的其他代码。 试试这个你的post

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

根据代码更改编辑

将您的表单中的ng模型更改为。

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

我认为这条线路是失败的

 var awesomeThing = new Thing(req.body); 

我认为正在发生的是你正在发送一个像这样的对象在身体

 { tempThing: "sometext" } 

当mongoose试图创build你的对象时,它没有一个名为tempThing的属性,所以它被释放出来。 如果你愿意的话,可以通过在你的schema上设置{strict:false}来覆盖它,但是,如果你的意图是从你的表单中设置名字,那么我将以更改tempThing为起点。

老答案

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

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