【问题标题】:How to use $resource to post data in angular.js?如何使用 $resource 在 angular.js 中发布数据?
【发布时间】:2015-06-17 15:48:03
【问题描述】:

我尝试将 cmets 保存到我的文章中

关于我的后端和架构的一些话

文章:

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

如何保存评论???

【问题讨论】:

  • Comment.update({_id: discuss._id, body: $scope.body, user: 'user'}).success 或者可能是 .post 而不是 .update 用于 db 中的新条目,这取决于服务器端的实现。

标签: angularjs express mean-stack meanjs


【解决方案1】:

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

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 回调中可用。 希望对您有所帮助,如果您需要更多帮助,请告诉我。

【讨论】:

  • 谢谢。我得到 {body: 'First comment', Discussion_id = '552a18c952bf34202a2cd0bd', use: Object 但我有错误 GET 500 server api/disqusses/cmets。为什么要获取?在我的角度服务中返回 $resource('api/discusses/cmets', { DiscussionId: '@_id' }, { update: { method: 'PUT' },我有这样的服务器路由 app.route('/api /disqusses/cmets').all(disqussesPolicy.isAllowed) .post(disqusses.addcmets);
  • 你为什么不使用 router.post(..) ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-19
  • 2018-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-13
相关资源
最近更新 更多