如何使用$resource 来post 中的数据angular.js?

How to use $resource to post data in angular.js?

我尝试保存对我文章的评论

关于我的后端和模式的一些话

文章:

var DiscussSchema = new Schema({
    ...
    user: {
        type: Schema.ObjectId,
        ref: 'User'
    },
    comments: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Comment'
    }]
});

评论:

var CommentSchema = new mongoose.Schema({
    body: {
        type: String,
        default: '',
       required: 'Please fill Comment name',
       trim: true
    },
    user: {
        type: Schema.ObjectId,
        ref: 'User'
    },
    discuss: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Disquss'
    }
});

我为我的服务器控制器添加了到服务器路由的路由

app.route('/api/discusses/:discussId/comments')
    .all(discussesPolicy.isAllowed)
    .post(discusses.comment);

还有我的 Angular 服务

angular.module('discusses').factory('Comments', ['$resource',
    function($resource) {
        return $resource('api/discusses/:discussId/comments', {
                discussId: '@_id'
            }, {
            update: {
                method: 'PUT'
            },
        });
    }
]);

我在我的 angular 控制器中尝试了很多版本的 addComment,但我总是得到错误 - undefined

$scope.addComment = function(){
    if($scope.body === '') { return; }
    //Comment service
    Comment.addComment(discuss._id, {
        body: $scope.body,
        user: 'user',
    }).success(function(comment) {
       $scope.discuss.comments.push(comment);
    });
    $scope.body = '';
};

如何保存评论???

您可以使用 $save 方法是 $resource 服务,如官方文档所述 here。 举个例子,在你的控制器中你可以做类似的事情: 创建一个终点 '/api/discusses/comments'.

var CommentResource = $resource('/api/discusses/comments');
$scope.myFun = function(){
    var commentRes = new CommentResource();
    commentRes.discuss_id = 'some..iid';
    commentRes.comment = 'some comment';
    commentRes.someParam = 'some param value';
    
    commentRes.$save(function(result){
         //do something with result..
    });
}

$save 适用于 POST http 动词,因此在后端对其进行适当处理。 您可以在快速路由处理程序中使用 req.body 访问传递到 $save 的所有值。 您可以在处理 req.body 参数后将值传递给 angularjs,结果将在 $save 回调中可用。 希望对您有所帮助,如果您需要更多帮助,请告诉我。