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' 运算符绑定更强。