无法使用AngularJs

时间:2016-06-06 04:45:24

标签: angularjs mongodb mean-stack

当我尝试更改博客的状态时,状态不会在数据库中更新。 Status是字符串字段,最初在数据库

中存储为0
api.post('/statuschange', function(req, res){
    Blog.find({_id: req.query.blog_id}).update({$set:{'status': req.body.status}}, function (err, status) {

            if(err){
                res.send(err);
                return;
            }

            if(req.body.status == '1') {
                res.json('Blog added')
                    return;
                }

            if(req.body.status == '-1'){
                 res.json('Blog not added');
                     return;
                 }
    });
})

api在postman上成功运作

工厂档案

angular.module('blogfact', ['authService'])

.factory('blogFactory', function($http, AuthToken){

var factory = {};
var token = AuthToken.getToken();

factory.changestatus = function(info, callback){

     $http({
        url: 'api/statuschange',
        method:'POST',
        headers:{'x-access-token':token},
        params:{'blog_id': info},
    })
        .success(function(response){
            callback(response)
        })
}
return factory
})

控制器文件

angular.module('blogCtrl', ['blogfact']);

.controller('BlogController', function(blogFactory, $routeParams){

    var that=this;
    blogid = $routeParams.id;
    var getthatBlog = function(){
        blogFactory.getthatBlog(blogid, function(data){
        //console.log('[CONTROLLER] That Blog:',data);
        that.blog = data;
    })
}
    this.changestatus = function(info){
        blogFactory.changestatus(info, function(data){
            getthatBlog();
        })
        }
    })

html文件

<div ng-controller="BlogController as blog">
<textarea ng-model="blog.status"></textarea>
<button class="btn btn-success" ng-click="blog.changestatus(blog._id)">Submit</button>
</div>

3 个答案:

答案 0 :(得分:1)

如果您的问题是关于MongoDB中的值没有更新,那么它的接缝是由于status请求中缺少POST数据。

我建议您在HTML中发送整个blog对象,以便您拥有博客的状态

<button class="btn btn-success" ng-click="blog.changestatus(blog)">Submit</button>

然后在blogFactory中添加数据

$http({
    url: 'api/statuschange',
    method:'POST',
    headers:{'x-access-token':token},
    params:{'blog_id': info._id},
    data: {status: info.status}   // <==
})

现在,您应该可以通过 req.body.status 在NodeJS服务器后端获取博客状态数据。

更新

使用mongoose的update方法尝试以下方法:

Blog.update({_id: req.query.blog_id}, {status: req.body.status}, function(err, numAffected){
   ...
});

或者,或者:

Blog.findOne({_id: req.query.blog_id}, function(err, blog){
    blog.status = req.body.status;
    blog.save();
});

答案 1 :(得分:0)

  1. 您正在params发送数据并从req.body获取数据。 您应该使用req.queryreq.param。否则,如下所示发送正文数据

    $ HTTP({    url:'api / statuschange',    方法:'POST',    params:{'blog_id':info},    数据:{'status':1}  })

  2. 您在客户端传递1个参数并在服务器端获取两个参数(req.body.status,req.query.blog_id)

  3. 来自

  4. token值在哪里?

    检查测试代码的简化方法 http://plnkr.co/edit/tyFDpXw2i0poICwt0ce0

答案 2 :(得分:0)

Angular让您在客户端修改收集数据,但要在服务器上实际更新它,您需要通知服务器您的更改(通过API)。

有几种方法可以做到这一点,但是如果你想从客户端到服务器进行无缝更新,可以试试meteor。

http://www.angular-meteor.com/

https://www.meteor.com/