Open jazzhuang opened 6 years ago
完成的实现并没有错:
if (toStringify[key] && ('' + toStringify[key])) {
list[i] = `${key}=${toStringify[key]}`;
} else {
list[i] = `${key}`;
}
如果 0 或者 false,会转成字符串的形式,其长度不为 0.
如果是0或者false, toStringify[key] == false, 即 toStringify[key] && ('' + toStringify[key]) == false
我知道问题了。因为之前都是从 querystring 上取下来的值,都是 string 类型的。所以不存在 0/false 的情况。当POST的时候,才会命中这个逻辑。
https://github.com/aliyun/api-gateway-nodejs-sdk/blob/7b2c85edb9f397d7bff30f90984335d44c7133ff/lib/client.js#L106
注: 根据网关的文档签名描述,https://help.aliyun.com/document_detail/29475.html?spm=5176.product29462.6.569.ZDrfpw “如果某个参数的 Value 为空只保留 Key 参与签名,等号不需要再加入签名。” 可能代码实现的时候误解了这里的意思了!