无法使用AngularJs更新mongoDB中的数据
当我试图更改博客的状态时,数据库中的状态没有更新。状态为字符串字段,最初在数据库中存储为0无法使用AngularJs更新mongoDB中的数据,angularjs,mongodb,mean-stack,Angularjs,Mongodb,Mean Stack,当我试图更改博客的状态时,数据库中的状态没有更新。状态为字符串字段,最初在数据库中存储为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
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正在邮递员上成功运行
工厂文件
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>
提交
params
中发送数据,并从req.body
获取数据。
您应该使用req.query
或req.param
。否则,发送身体上的数据,如下所示
$http({
url:'api/statuschange',
方法:“POST”,
参数:{'blog_id':info},
数据:{“状态”:1}
})req.body.status
,req.query.blog\u id)标记的值来自哪里
让我们在客户端修改采集数据,但要在服务器上实际更新数据,需要将更改通知服务器(通过API) 有几种方法可以做到这一点,但如果您想要从客户端到服务器的无缝更新,可以试试meteor
如果您的问题是关于MongoDB中的值没有更新,那么这是由于您的
POST
请求中缺少状态
数据造成的
我建议您在HTML中发送整个blog
对象,这样您也可以获得blog的状态:
现在,您应该能够通过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();
});
您是否观察过浏览器控制台是否存在任何客户端/服务器端错误。您的问题有点不清楚。当然不是“更新数据库”吗?发送的数据可能有问题吗?还是服务器端代码有问题?(此外,如果您编辑问题并设置代码格式以便于阅读,也会有所帮助。)@AhmadBaktashHayeri hi。。我不太懂这个意思。。但是每当我转到html页面更改状态时。。浏览器控制台显示从浏览器返回的博客信息blogfactory@Jeroen我不明白数据是如何发送到html文件的,或者我应该在html文件中传递什么来更新状态。。api工作正常,但问题仍然存在。。!!我不理解新值(我正在输入)是如何发送的,将
this.changestatus
更改为this.changestatus
您是否检查了node.js上的值?我不知道您到底想说什么。。api在postmanJust print中成功运行。在函数api.post('/statuschange',函数(req,res){
中打印console.log(req.body)
,然后重新启动服务器,然后单击Submit
按钮,检查您得到的值。仍然不工作..在控制台中..api中显示log(req.body){status:我输入的值(1或0或-1)…但在我的数据库中没有更新这意味着至少你在身体中获得了状态
。最好记录错误
,看看更新时是否有任何DB错误。如果你使用猫鼬
,最好使用。更新
,而不是你的方法。是的,我正在使用猫鼬,不知道在哪里错误是..!!提示:在更新我的答案和确认时,尝试猫鼬式的方法。
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();
});