Javascript 变量的范围和更改节点中的全局变量
我在函数中有一个if-else块。结果取决于q的值。如果q的值是“定义良好的查询”(例如:localhost:1235/docs/q?beaven),那么它应该打印4。如果查询没有很好地定义,即.q={}(例如:localhost:1235/docs),那么结果应该有Javascript 变量的范围和更改节点中的全局变量,javascript,node.js,Javascript,Node.js,我在函数中有一个if-else块。结果取决于q的值。如果q的值是“定义良好的查询”(例如:localhost:1235/docs/q?beaven),那么它应该打印4。如果查询没有很好地定义,即.q={}(例如:localhost:1235/docs),那么结果应该有code和message作为它们的属性(以及它们各自的值),并作为JSON传递 但事实并非如此。我把望远镜弄乱了。输出为:“” if(q==={})永远不会为真,因为==测试这两个对象是否完全相同(而不是它们是否具有相同的属性),这
code
和message
作为它们的属性(以及它们各自的值),并作为JSON传递
但事实并非如此。我把望远镜弄乱了。输出为:“”
if(q==={})
永远不会为真,因为==
测试这两个对象是否完全相同(而不是它们是否具有相同的属性),这里永远不会出现这种情况,因为q
和{}
始终是不同的对象
您可能需要测试q
上是否存在特定属性。或者您可以测试if(Object.keys(q).length==0)
以查看q
是否为空对象。但是,我认为对你的代码来说最好的可能是看看你在q
上寻找的特定属性是否存在。如果(q=={}
将永远不会是真的,因为==
测试这两个属性是否完全相同(而不是它们是否具有相同的属性)这里永远不会出现这种情况,因为q
和{}
始终是不同的对象
您可能需要测试
q
上是否存在特定属性。或者您可以测试if(Object.keys(q).length==0)
以查看q
是否为空对象。但是,我认为最适合您的代码的可能是查看您在q
上查找的特定属性是否存在。尝试设置res.status尝试设置res.status您的代码可以工作,但它会发出警告。它说,未处理的承诺拒绝将在不久的将来终止Nodejs。@Vagabond-我的代码建议与被拒绝的承诺完全无关-这在代码的其他地方,而不是在您在问题中显示的任何代码中。所以,这似乎与你发布的内容无关。这是一个单独的问题,发生在您的真实代码部分中,您没有在此处显示。@Vagabond-也可能是您的catch
块本身抛出了一个错误,导致errorWrap()
返回一个被拒绝的承诺,而您在任何地方都不会处理该承诺。根据你的问题中的代码,这只是一种猜测的可能性。也可能是在真实代码的其他地方,承诺被拒绝了。你的代码可以工作,但它给出了一个警告。它说,未处理的承诺拒绝将在不久的将来终止Nodejs。@Vagabond-我的代码建议与被拒绝的承诺完全无关-这在代码的其他地方,而不是在您在问题中显示的任何代码中。所以,这似乎与你发布的内容无关。这是一个单独的问题,发生在您的真实代码部分中,您没有在此处显示。@Vagabond-也可能是您的catch
块本身抛出了一个错误,导致errorWrap()
返回一个被拒绝的承诺,而您在任何地方都不会处理该承诺。根据你的问题中的代码,这只是一种猜测的可能性。在真实代码的其他地方,承诺也可能被拒绝。
function doSearch(app){
return errorWrap(async function(req, res) {
const q = req.query || {};
try {
// let results = await app.locals.finder.find(q);
let results = "";
// console.log(q);
if(q === {}){
results = {
code: "BAD_PARAM",
message: "required query parameter \"q\" is missing"
};
res.json(results);
// results = await app.locals.finder.find(q);
}else{
results == 4;
res.json(results);
}
}
catch (err) {
const mapped = mapError(err);
res.status(mapped.status).json(mapped);
}
});
}