Postman Pre-request脚本如何动态生成请求参数?

夏侯慧慧 阅读 50

我在用Postman测试API时想通过Pre-request脚本生成动态token,但代码一直报错。比如在Vue项目里需要传入时间戳参数:


<template>
  <button @click="testAPI">调用接口</button>
</template>
<script>
export default {
  methods: {
    testAPI() {
      const timestamp = Date.now()
      // 这里需要和Postman的预请求脚本生成的token匹配
      console.log('当前时间戳:', timestamp)
    }
  }
}
</script>

我试过在Pre-request脚本里写:

pm.collectionVariables.set("timestamp", Date.now())

但运行时报“Date is not defined”,改用new Date()又提示无法调用now()方法。Postman的预请求环境和普通JS差异太大了,该怎么正确生成当前时间戳呢?

我来解答 赞 6 收藏
二维码
手机扫码查看
2 条解答
西门君杰
在Postman的Pre-request脚本里,环境确实和普通的JavaScript不一样,所以像Date.now()这种写法会报错。正确的做法是用Postman内置的pm.variables.replaceIn或者直接通过JavaScript的new Date().getTime()来生成时间戳。

下面是一个完整的示例代码,你可以在Pre-request脚本中这样写:

// 生成当前时间戳
const timestamp = new Date().getTime();

// 设置为环境变量或者集合变量
pm.collectionVariables.set("timestamp", timestamp);

// 如果需要生成token,可以结合时间戳和其他参数
const secretKey = "your-secret-key"; // 注意:不要把密钥硬编码在脚本里,建议从环境变量读取
const token = CryptoJS.HmacSHA256(timestamp.toString(), secretKey).toString(CryptoJS.enc.Hex);

// 将token设置为变量,供后续请求使用
pm.collectionVariables.set("dynamicToken", token);


几点需要注意的地方:
1. Postman内置了CryptoJS库,可以直接用来加密或签名,但记得确保你的算法和后端匹配。
2. 不要直接把敏感信息比如密钥写死在脚本里,最好通过Postman的环境变量或者全局变量来管理,避免泄露风险。
3. 如果你的API对时间戳有精度要求(比如只接受秒级时间戳),记得将毫秒级时间戳除以1000再使用,比如Math.floor(timestamp / 1000)

最后提醒一下,动态生成的参数尤其是token,一定要定期检查安全性。如果你的Vue项目也需要验证这个token,记得让前后端约定好相同的生成规则,并且注意不要在前端暴露关键逻辑。安全无小事,多留个心眼总是好的。
点赞 1
2026-02-18 16:08
Dev · 文鑫
Postman的Pre-request脚本环境确实有点坑,很多浏览器里的全局对象都不存在。不过生成时间戳很简单,代码放这了:

pm.collectionVariables.set("timestamp", new Date().getTime());


直接用 new Date().getTime() 就能拿到时间戳,不会报错。然后你在请求里用 {{timestamp}} 就可以了。

顺便说一句,Postman的脚本环境挺反人类的,写点复杂逻辑真让人头疼。以上代码亲测可用,放心用吧。
点赞 2
2026-02-02 14:31