Update函数只存储数据库中的name属性而不是url属性,而是存储undefined

时间:2015-04-26 16:47:30

标签: angularjs node.js api mongoose mean-stack

我使用nodejs,mongoose和angular来实现具有平均堆栈的RestAPI,我试图在我的数据库中更新提供者记录。在这里你可以找到我在put方法中的内容: 我有我的架构描述here 这就是我在控制台中获得的内容。

Object {_id:“553d27a24c47696420c6ee39”,​​name:“nn”,url:undefined,__ v:0,posts:Array [0] ...}

如果您通过邮递员输入数据,此API可以正常工作。

/*update the provider by id in REST API*/
router.put('/providers/:provider/edit', function (req, res) {

    var id = req.params.provider;
    var query = {"_id": id};
    var update = {
        name: req.body.name,
        url: req.body.url
    };
    var options = {new: true};
    Provider.findOneAndUpdate(query, update, options, function (err, provider) {
        if (err) { return next(err); }
        res.json(provider);
    });
})

在这里,找到相关工厂:

 ob.updateProvider = function (provider) {
        return $http.put(urlBase +'/providers/' + provider._id + '/edit', provider)
            .success(function(provider){
              ob.providers.push(provider);
               // angular.copy(provider, ob.providers);
            })
    };

这部分是在模态控制器中:

$scope.updateProvider = function (updatedProvider) {
            var provider = updatedProvider;
                providers.updateProvider(provider)
                    .success(function () {
                        $scope.status = 'Updated provider.';
                    }).
                    error(function(error) {
                        alert('Unable to update provider: ' + error);
                    });
            };

我还使用了ui-bootstarpt中的模态,它也在BlogCtrl中

var modalInstance = $modal.open({
                templateUrl: 'update_provider_model.html',
                controller: function ($scope, $modalInstance, provider){
                    $scope.provider = provider;
                    $scope.ok = function () {
                        $modalInstance.close($scope.provider);
                    };
                    $scope.cancel = function () {
                        $modalInstance.dismiss('cancel');
                    };
                },
                size: size,
                resolve: {
                    provider: function () {
                        return provider;
                    }
                }
            });

            modalInstance.result.then(function (selectedItem) {
                $scope.selected = selectedItem;
            }, function () {
                $log.info('Modal dismissed at: ' + new Date());
            });
        };

最后,在模板update_provider_model.html内,在此模板的其余部分,我有ng-model =“provider.name”,ng-model =“provider.url”

<div class="modal-footer">
    <button ng-click="updateProvider(provider);ok()" class="btn btn-success"><i class="icon-white icon-plus"></i> Update & Close</button>
    <button ng-click="cancel()" class="btn btn-warning">Cancel</button>
</div>

在任何情况下,我都无法调用我的api put方法,它永远不会执行。我没有得到任何错误。我找不到有什么问题,哪个部分有问题。因此我无法将更新记录保存到数据库中。只有我可以在视图和我的模态中看到我的变化。如果有人可以建议我正确的解决方案,我会感谢你。

1 个答案:

答案 0 :(得分:0)

我保留这个问题。它可能对你们中的一些人有用。我想补充一下url属性的问题。我已经定义了Url property type =“url”。但是,当我尝试使用一些随机文本时,我将值相等的文本放在url中,因此它返回undefined并且从未将该值存储在数据库中的变量中。 感谢@charlietfl的帮助。