1

其他帖子已经处理了这个问题,但我自己仍然无法应用这个问题。

我有一个 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:未定义伪造

code 变量具有整个缩小的 Javascript 块。

4

1 回答 1

1

而不是使用eval,您可以执行以下操作:

(new Function(code))();

console.log(forge);

Postman 控制台中的输出(您可以在右下角打开):

{
  aes:{...}
  asn1:{...}
  cipher:{...}
  ...
}

说明:我不知道为什么,但我就是无法eval上班。我怀疑它与 VM Postman 正在使用的全局范围有关(window在浏览器中没有类似的东西,或者global在 Node.js 中没有类似的东西,而是一个pm全局对象)。

函数构造函数的作用类似于eval函数,但将其封闭在自己的内部范围内,因此无法访问外部变量。你可以在这里阅读更多。

语法有点混乱,但换句话说,它创建了一个新函数然后调用它。new Function(...)由于“函数调用”运算符(()末尾的)比“新”运算符绑定得更强,因此必须有一对额外的括号。

于 2020-01-20T18:22:51.857 回答