使用最新版本的Postman。
我有一个预定义的变量“ useridToken”,它是一个数字:123456
var useridToken = pm.environment.get("useridToken");
//console.log(useridToken);
var jsonData = pm.response.json();
const user = jsonData.find(u => u.user_metadata.employeeId === useridToken);
const userid = user ? user.user_id : 'not found';
pm.environment.set("user_id", userid);
每当我运行此代码时,它都会返回错误。
控制台日志输出是整数形式的数字:123456
每当我运行以下代码:
var useridToken = 123456
var jsonData = pm.response.json();
const user = jsonData.find(u => u.user_metadata.employeeId === useridToken);
const userid = user ? user.user_id : 'not found';
pm.environment.set("user_id", userid);
它的工作原理很吸引人,但是我不想在代码中使用硬编码的useridToken,我想从我的环境变量中获取它。我不太明白为什么第一部分不起作用?我要监督什么?
答案 0 :(得分:2)
之所以发生这种情况,是因为在您的::numeric
方法中,您使用的是SELECT
time::date,
count(*) as total,
(
count(status) filter (where log.status = '404 NOT FOUND') /
count(*)::real
) * 100 as error
FROM log
GROUP BY time::date
HAVING count(*) > 0
比较,并且当您从环境中获取数据时,总是将其作为“字符串”而不是“数字”来获取(邮递员始终以字符串格式给出环境变量的值)
因此,当您在JS中使用.find
比较时,它还会检查数据类型,此处
===
=== ===
实际上是错误的,这就是为什么您的发现不起作用的原因。
因此,您需要更新代码以实际解析从环境中获取的整数。
这应该可以解决您的问题:
string
答案 1 :(得分:1)
解决方案:
由于您使用的是 ===运算符,因此它也会检查变量的类型。在某些情况下,两个操作数的类型可能不同。因此,请使用以下内容来避免该问题。
const user = jsonData.find(u => +u.user_metadata.employeeId === +useridToken); // converts to number then checks
或
const user = jsonData.find(u => u.user_metadata.employeeId.toString() === useridToken.toString()); // converts to string then checks
或
const user = jsonData.find(u => u.user_metadata.employeeId == useridToken); // checks without the operands type. (not recommended)