javascript - 变量的范围和更改节点中的全局变量
问题描述
我在函数中有一个 if-else 块。结果取决于 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 === {})
永远不会是真的,因为===
测试两者是否是完全相同的对象(而不是它们是否具有相同的属性)并且这里永远不会是这种情况,因为q
并且{}
总是不同的对象。
您可能需要测试是否存在特定属性q
。或者你可以测试if (Object.keys(q).length === 0)
看看是否q
是一个空对象。但是,我认为最适合您的代码的可能是查看您正在寻找的特定属性是否q
存在。
推荐阅读
- windows - Spring Boot 应用程序在 Windows 10 上启动,但在 OS X (HS) 上不启动
- php - 将变量返回到视图
- reactjs - React-bootstrap:一行中的两列未呈现
- python - 从 beautifulsoup 结果中删除HTML 标记
- css - Bootstrap 3输入组插件丢失标记
- r - R:如何以递归方式将文本文件读入列表列表?
- php - 在 symfony4 中为 redis 设置无键前缀
- firebase - 如何使用 firebase cli 将文件推送到 firebase 存储
- swift - 部分中选定行的索引
- azure-ad-b2c - Azure AD B2C - 身份框架体验时间表