javascript - 为什么我不能向 Postman 添加简单的可重用功能?

标签 javascript postman

在 Postman 中,我试图实现以下目标:

  1. 在集合中:
    1. 创建包含可重用函数的实用程序对象
    2. 将该实用程序对象存储在全局变量中,以便稍后在请求测试脚本中使用。
  2. 在请求中:
    1. 从全局变量中提取实用程序对象代码。
    2. 评估代码并将生成的实用程序对象实例存储在局部变量中。
    3. 调用实用程序对象实例的方法。

不过,我在网络上看到的许多实现似乎都不起作用。我可以一路下降到步骤 2.2,然后事情就会可怕地燃烧殆尽。 Postman 下的 JavaScript 引擎拒绝评估存储在全局集合中的对象。

为了隔离该问题,我已将其精简为最低限度的脚本,并将其放置在我的集合的预请求脚本中:

postman.setGlobalVariable("loadUtils", function utils() {
    let utils = {};
    utils.main = function() {
        console.log("Hello, world!");
    }
    return utils;
} + ';utils()');

然后我尝试按如下方式加载此脚本:

var code = globals.loadUtils;
console.log(code);
var utils = eval('(' + code + ')');

但总是出现以下错误:

There was an error in evaluating the test script: SyntaxError: Unexpected token ;

我尝试过:

  • 将整个函数转换为多行字符串并将结果存储在全局环境中。发生了同样的错误。
  • 直接在函数体中包含括号。这也行不通。
  • 使用 lambda 表达式,但这会导致编辑器本身出现各种问题。

我确信这是一件简单、愚蠢且显而易见的事情,但我只是没有看到它。

有人可以指出我在这里做错了什么吗?

附注正如 here on StackOverflowPostman forums on GitHub 所建议的那样,这应该是可能的(尽管需要滚动浏览评论才能看到解决方案)。

最佳答案

您将两个语句存储为字符串,并用分号分隔:

 "function utils() { /*...*/ }; utils()"

然后将该字符串括在括号中并尝试执行它:

eval("(function { /*...*/ }; utils())")

这是行不通的,因为表达式内部的 ; 是一个语法错误。

您可以删除括号,用冒号替换分号或使用 IIFE(我在这里更喜欢):

eval("(" + someFunc + ")()");

关于javascript - 为什么我不能向 Postman 添加简单的可重用功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55364125/

相关文章:

java - Spring Boot找不到字段表单font-end

javascript - Controller 性能比较中的自定义过滤器与过滤器功能

java - 将项目战略性地放置在具有最小重叠连接的容器中的逻辑

entity-framework - 如何修复 .Net Core POST 操作中的 400 Bad Request 错误?

oauth-2.0 - 如何使用 RSA SHA-256 哈希对 JWT 进行签名

curl - 如何使用 cURL -XGET -d' {"query": "aaa"}' 之类的正文触发 Postman GET 请求

javascript - 混合每个 Underscore 方法作为 Collection#models 的代理

javascript - 为什么javascript `for`循环会快速静音/取消静音视频

javascript - 如何使用两个按钮增加和减少文本值

R - 将 Postman 中带有原始正文的 GET 请求转换为 R 中的 GET 请求