我试图发一个http请求删除一个帖子一切正常但我回来的响应代码总是" 1"并且我不知道为什么。这会影响我的前端以及错误处理部分。我可能知道为什么会这样吗?
这是我到目前为止所拥有的
注册http请求
app.delete('/channelHandler/channel/:permalink/delete', channelHandler.deleteChannelByPermalink);
路线
执行后我得到"no problem in route"
this.deleteChannelByPermalink = function(req, res, next){
var permalink = req.params.permalink;
channels.deleteChannelByPermalink(permalink,function(err, results) {
"use strict";
if(err){
console.log("error in route");
res.send(400,err);
}
console.log("no problem in route");
res.send(200,results);
});
}
数据库
执行后我得到"done in database"
this.deleteChannelByPermalink = function(data, callback){
"use strict"
channels.remove({'channelPermalink': data}, function(err, post) {
"use strict";
if (err) return callback(err, null);
callback(err, post);
console.log("done in database");
});
}
前端
//执行后我得到"something is wrong"
而不是"LOL"
$scope.confirm = function(titleform){
if(titleform === items.currentTitle){
$http.delete('/channelHandler/channel/'+items.currentPermalink+'/delete').
success(function(data){
alert("LOL")
}).error(function(err){
alert("Something is wrong")
$scope.errorMessage = err;
});
$modalInstance.dismiss('cancel');
}else{
$scope.errorMessage = "Please enter the correct title "
}
}
答案 0 :(得分:2)
您的错误处理控制流程缺少必要的“返回”,这会导致您为同一请求调用res.send
两次,这是一个错误。
this.deleteChannelByPermalink = function(req, res, next){
var permalink = req.params.permalink;
channels.deleteChannelByPermalink(permalink,function(err, results) {
"use strict";
if(err){
console.log("error in route");
res.send(400,err);
//NEED TO RETURN HERE!
return;
}
console.log("no problem in route");
res.send(200,results);
});
}
但是,根据你问题中的信息,我不确定这个错误实际上会导致你所看到的行为。但无论如何你需要解决这个问题。否则我在你的片段中看不到任何其他明显的错误。
答案 1 :(得分:1)
这是我犯的一个愚蠢的错误,我很抱歉浪费你的时间。
我犯的错误是我将结果返回到前端,结果包含值" 1"这是数据库部分的结果
channels.remove({'channelPermalink': data}, function(err, post) {
"use strict";
if (err) return callback(err, null);
callback(err, post); // post contain "1"
console.log("done in database");
});
这是我的更正
channels.deleteChannelByPermalink(permalink,function(err, results) {
"use strict";
if(err){
console.log("error in route");
res.send(400,err);
return;
}
console.log("no problem in route");
// res.send(200); instead of res.send(200,results)
return;
});