邮递员获取在数组查找中使用的变量不起作用

时间:2019-08-02 07:56:33

标签: javascript postman

使用最新版本的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,我想从我的环境变量中获取它。我不太明白为什么第一部分不起作用?我要监督什么?

2 个答案:

答案 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)