当我尝试更改博客的状态时,状态不会在数据库中更新。 Status是字符串字段,最初在数据库
中存储为0api.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>
答案 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)
您正在params
发送数据并从req.body
获取数据。
您应该使用req.query
或req.param
。否则,如下所示发送正文数据
$ HTTP({ url:'api / statuschange', 方法:'POST', params:{'blog_id':info}, 数据:{'status':1} })
您在客户端传递1个参数并在服务器端获取两个参数(req.body.status
,req.query.blog_id)
来自
token
值在哪里?
醇>
检查测试代码的简化方法 http://plnkr.co/edit/tyFDpXw2i0poICwt0ce0
答案 2 :(得分:0)
Angular让您在客户端修改收集数据,但要在服务器上实际更新它,您需要通知服务器您的更改(通过API)。
有几种方法可以做到这一点,但是如果你想从客户端到服务器进行无缝更新,可以试试meteor。