我的函数中有一个 if-else block 。结果取决于 q 的值。如果 q 的值是一个“明确定义的查询”(例如:localhost:1235/docs/q?beaven),那么它应该打印 4。如果查询没有明确定义,即。 q={}(例如:localhost:1235/docs),结果应将 code
和 message
作为其属性(及其各自的值)并以 JSON 形式传递。
但是,这并没有发生。我搞乱了范围。输出为:""
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);
}
});
}
最佳答案
if (q === {})
永远不会为 true,因为 ===
测试这两个对象是否完全相同(而不是它们是否具有相同的属性),但这里永远不会出现这种情况,因为 q
和 {}
始终是不同的对象。
您可能需要测试 q
上是否存在特定属性。或者您可以测试 if (Object.keys(q).length === 0)
来查看 q
是否为空对象。但是,我认为最适合您的代码的可能是查看您在 q
上查找的特定属性是否存在。
关于javascript - 变量的范围和更改 Node 中的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53138286/