如何使用$ resource在angular.js中发布数据?

时间:2015-04-12 06:20:03

标签: angularjs express mean-stack meanjs

我尝试将评论保存到我的文章中

关于我的后端和模式的一些关键词

文章:

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'
            },
        });
    }
]);

我在角度控制器中尝试了很多版本的addComment,但我总是得到错误 - 未定义

$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 = '';
};

如何保存评论???

1 个答案:

答案 0 :(得分:1)

您可以使用$ save方法是$ resource服务,如官方文档here中所述。 举一个例子,在你的控制器中,你可以这样做: 创建一个终点' / api / discussion / 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回调中可用。 我希望它有所帮助,如果您需要更多帮助,请告诉我。