【发布时间】:2016-09-25 20:57:57
【问题描述】:
这个节点/快递功能给我一个错误: 发送后无法设置标题。 它曾经工作正常,但我对用户架构进行了一些更改,将所有地址项移动到“地址”下,如下所示:
firstname,
lastname,
address:{
street,
city,
loc (array of numbers)
...
}
所以新函数如下所示:
export function searchMembers(req, res) {
var lat = req.body.lat;
var lon = req.body.lon;
var zoom = req.body.zoom || 14;
var query = User.find();
var distance = 5000;
// when this line is removed, problem is gone:
query = query.where('address.loc').near({center:{type:'Point', coordinates:[lon,lat]}, maxDistance: distance, spherical:true});
query = query.where({'address.city': 'Toronto'});
query = query.sort({'lastname': 1});
query.exec(function(err,users){
if(err) res.send(err);
var final = [];
_.forEach(users, function(x){
var obj = {};
obj.id = x._id;
obj.name=x.firstname + ' ' + x.lastname;
obj.latitude=x.address.loc[1] ;
obj.longitude=x.address.loc[0] ;
final.push(obj);
});
res.status(200).json(final);
});
}
所以当我运行它时,我得到了一个有趣的错误:发送后无法设置标题。 指向函数的最后一行: res.status(200).json(final);
我试图消除一些东西以找到根本原因。 当我使用“近”功能删除 where 行时,问题就消失了。 我添加了其他过滤,只是为了测试,一切都很好。只有这个引起了问题。 有什么想法吗?
【问题讨论】:
-
您可以尝试将错误处理更改为
if (err) return res.send(err)吗?我猜是抛出了一个错误,res.send被调用,然后,底部的最后一个res.status也被调用,导致你的错误。