Postman - 在外部 JS 文件中调用函数 - 'x is not defined'
Postman - calling function in external JS file - 'x is not defined'
其他帖子已经解决了这个问题,但我自己仍然无法应用。
我有一个 Postman 预脚本测试。
我正在尝试调用定义在
http://some-server:port/lib/forge/forge.min.js
代码调用代码如下:
let pubKey = forge.pki.publicKeyFromPem(atob(publicKey));
...
let .... = forge.util.encodeUtf8(data));
let ... = forge.util.encode64(text);
...
我尝试了 eval
技巧,将整个代码放入一个变量中。
var code = pm.collectionVariables.get('forge.min.js');
eval(code);
产生的错误是:
ReferenceError: forge is not defined
代码变量有整块缩小的Javascript。
除了使用 eval
,您还可以:
(new Function(code))();
console.log(forge);
Postman控制台输出(右下角打开):
{
aes:{...}
asn1:{...}
cipher:{...}
...
}
解释: 我不知道为什么,但我无法让 eval
工作。我怀疑它与 VM Postman 正在使用的全局范围有关(没有像浏览器中的 window
或 Node.js 中的 global
而是一个 pm
全局对象) .
函数构造函数的作用类似于eval
函数,但将其封装在自己的内部作用域中,因此无法访问外部变量。您可以阅读更多 here.
语法有点乱,但是说白了就是创建一个新的函数然后调用它。 new Function(...)
周围必须有一对额外的括号,因为 'function call' 运算符(末尾的 ()
)比 'new' 运算符绑定更强。
其他帖子已经解决了这个问题,但我自己仍然无法应用。
我有一个 Postman 预脚本测试。
我正在尝试调用定义在 http://some-server:port/lib/forge/forge.min.js
代码调用代码如下:
let pubKey = forge.pki.publicKeyFromPem(atob(publicKey));
...
let .... = forge.util.encodeUtf8(data));
let ... = forge.util.encode64(text);
...
我尝试了 eval
技巧,将整个代码放入一个变量中。
var code = pm.collectionVariables.get('forge.min.js');
eval(code);
产生的错误是:
ReferenceError: forge is not defined
代码变量有整块缩小的Javascript。
除了使用 eval
,您还可以:
(new Function(code))();
console.log(forge);
Postman控制台输出(右下角打开):
{
aes:{...}
asn1:{...}
cipher:{...}
...
}
解释: 我不知道为什么,但我无法让 eval
工作。我怀疑它与 VM Postman 正在使用的全局范围有关(没有像浏览器中的 window
或 Node.js 中的 global
而是一个 pm
全局对象) .
函数构造函数的作用类似于eval
函数,但将其封装在自己的内部作用域中,因此无法访问外部变量。您可以阅读更多 here.
语法有点乱,但是说白了就是创建一个新的函数然后调用它。 new Function(...)
周围必须有一对额外的括号,因为 'function call' 运算符(末尾的 ()
)比 'new' 运算符绑定更强。