簡體   English   中英

如何使用MEAN堆棧提交成功的發帖請求?

[英]How to submit a successful post request using the MEAN stack?

我正在使用yeoman搭建項目。 最后,我想學習搭建CRUD。 我被張貼請求卡住了。 我選擇了角全堆棧生成器,因為我對普通角生成器非常滿意。

嘗試將新對象提交到Things集合時,我的發布請求嘗試被400錯誤所包圍。 我很迷路,我需要使用此文件夾結構查看發布請求的完整代碼。

更新:但是,req.body出現了400錯誤。

UPDATE2:現在一切都正常工作,答案都在我的代碼和答案中。

因此, 使用yeoman的angular-fullstack生成器,我將如何發出請求以在mongo db的Thing集合中創建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
});

我直覺這是貓鼬阻止了此操作,因為我的提交與架構不匹配? 還有其他想法嗎? 在此處輸入圖片說明

編輯

好吧,最后的建議是基於查看我擁有的其他代碼。 試試這個代替你的帖子

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

根據代碼更改進行編輯

將表單中的ng-model更改為。

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

我認為這條線失敗了

var awesomeThing = new Thing(req.body);

我認為正在發生的事情是您正在發送一個看起來像這樣的物體

{ tempThing: "sometext" }

當貓鼬嘗試創建您的對象時,它沒有名為tempThing的屬性,因此無法使用。 如果願意,可以通過在架構上設置{strict:false}來覆蓋此設置,但是,如果您打算從表單中設置名稱,那么我首先將tempThing更改為name。

舊答案

我認為您的/lib/routes.js有錯字。 你有一個 ';' 在.get(api.awesomeThings)之后

這導致.post(api.awesomeThings)被忽略。 刪除分號,它可能會開始工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM