【问题标题】:JSON format error when I send it using POST method当我使用 POST 方法发送 JSON 格式错误
【发布时间】:2016-09-22 09:34:44
【问题描述】:

我的 json 帖子中的“格式”有问题

我有一个这样的 HTML-Angular 表单

<form name="signupForm" ng-submit="processForm()">
    <input name="names" ng-model="userInfo.names" type="text" class="form-control" required>
    <input name="lastName" ng-model="userInfo.lastName"  type="text" class="form-control" required>
    <input name="city" ng-model="userInfo.personals.city" type="text" class="form-control" required>
    <input name="cellNumber" ng-model= "userInfo.personals.cellNumber" type="text" required>
    <select multiple chosen class="chosen-select" ng-model="userInfo.personals.area">
        <option value="1">OP1</option>
        <option value="2">OP2</option>
        <option value="3">OP3</option>
    </select>
    <button type="submit" class="btn btn-success" ng-disabled="signupForm.$invalid">Post</button>
</form>

我的控制器是

function mainCTRL ($scope, $rootScope, $timeout, notify, $http) {
    $scope.processForm = function() {
        $http.post('/register', $scope.userInfo).success(function(res){console.log(res);});
    };
}

我的问题是当我的 api 获取 JSON 时,它看起来像

{
    names: "name",
    lastname: "last",
    personals: {
        city: "city",
        cellNumber: "12345",
        area: ['1','2']
    }
}

我尝试将其保存在模型中

router.post('/register', function(req, res, next){
    console.log(req.body);
    var perfil = new Perfiles(req.body);
    perfil.save(function(err, perfil){
         if(err){return next(err);}
            res.json(perfil);
    });
});

但它显示了一个 500 错误。如果我使用 Postman 发送帖子,请求格式会有所不同,并且可以保存

{
        names: "name",
        lastname: "last",
        personals.city: "city",
        personals.cellNumber: "12345",
        personals.area: ['1','2']
        }
  }

这两种方法有什么区别?

【问题讨论】:

    标签: angularjs mongodb api express


    【解决方案1】:

    如你所知,请求有两种数据类型:表单类型和json类型。

    所以你在这样发布的时候需要确定请求数据的类型。

    $http({
        data: $scope.userInfo,
        method: "POST",
        url: "/register",
        headers: {
            'content-type': "application/x-www-form-urlencoded"
        },
        dataType: 'JSON',
    }).then(function mySucces(res) {
       console.log(res);
    });
    

    而Postman的结果与其中一个网站不同的原因只是你错过了POSTMAN的数据类型选择。

    请尝试选择以下类型并重新发送。

    提交时可以从html表单中获取json值。

    <form name="signupForm" ng-submit="processForm(userInfo)">
        <input name="names" ng-model="userInfo.names" type="text" class="form-control" required>
        <input name="lastName" ng-model="userInfo.lastName"  type="text" class="form-control" required>
        <input name="city" ng-model="userInfo.personals.city" type="text" class="form-control" required>
        <input name="cellNumber" ng-model= "userInfo.personals.cellNumber" type="text" required>
        <select multiple chosen class="chosen-select" ng-model="userInfo.personals.area">
            <option value="1">OP1</option>
            <option value="2">OP2</option>
            <option value="3">OP3</option>
        </select>
        <button type="submit" class="btn btn-success" ng-disabled="signupForm.$invalid">Post</button>
    </form>
    

    ....

    $scope.processForm = function(userInfo) {
      console.log(userinfo);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 2020-08-25
      • 1970-01-01
      • 1970-01-01
      • 2023-02-19
      相关资源
      最近更新 更多