Почтальон - вызов функции во внешнем файле JS - 'x не определен' - PullRequest
1 голос
/ 20 января 2020

Другие посты касались этого вопроса, но я по-прежнему не могу применить его самостоятельно.

У меня есть предварительный тест Postman.

Я пытаюсь вызвать шифрование функция, определенная в http://some-server: порт / lib / forge / forge.min. js

Код вызывает код следующим образом:

let pubKey = forge.pki.publicKeyFromPem(atob(publicKey));
...
let .... = forge.util.encodeUtf8(data));
let ... = forge.util.encode64(text);
...

I попробовал трюк eval, поместив весь код в переменную.

var code = pm.collectionVariables.get('forge.min.js');
eval(code);

Полученная ошибка:

ReferenceError: forge не определен

Переменная кода имеет весь уменьшенный блок Javascript .

1 Ответ

1 голос
/ 20 января 2020

Вместо использования eval вы можете сделать:

(new Function(code))();

console.log(forge);

Вывод в консоль почтальона (вы можете открыть его внизу справа):

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

Объяснение: Я не уверен почему, но я просто не мог заставить eval работать. Я подозреваю, что это связано с глобальной областью использования VM Postman (нет window, как в браузерах или global, как в Node.js, но есть pm глобальный объект).

Функция Конструктор действует подобно функции eval, но заключает ее в свою внутреннюю область, поэтому внешние переменные не могут быть доступны. Вы можете прочитать больше здесь .

Синтаксис немного сбивает с толку, но, говоря словами, он создает новую функцию и затем вызывает ее. Вокруг new Function(...) должна быть дополнительная пара скобок, поскольку оператор 'function call' (() в конце) связывается сильнее, чем оператор 'new'.

...