Skip to content

URL一样的的Post请求,想根据reqBody里的不同参数,返回不同的resBody #39

@shownstrong

Description

@shownstrong

1.目前普通用法配置规则resBody://{reponse1}, 由于post请求的url都是一致的,每次mock不同数据需要临时重新修改。
不知道是否能定义规则,根据不同的reqBody,返回不同的resBody。一次性配置好,不需要临时再修改

2.尝试过whistle.script://test

 exports.handleRequestRules = (ctx) => {
 	// ctx.fullUrl 可以获取请求url
 	// ctx.headers 可以获取请求头
 	// ctx.options 里面包含一些特殊的请求头字段,分别可以获取一些额外信息,如请求方法、设置的规则等
 	ctx.rules = ['www.qq.com file://{test.html}'];
  	ctx.values = { 'test.html': 'Hello world.' };
 };

测试过Readme文档里的test脚本,可以mock成功。但是尝试获取请求体失败。

// 获取请求体数据
const requestBody = await new Promise((resolve, reject) => {
  let data = [];
  ctx.req.on('data', chunk => {
    data.push(chunk);
  });
  ctx.req.on('end', () => {
    resolve(Buffer.concat(data));
  });
  ctx.req.on('error', err => {
    reject(err);
  });
});

// 转换请求体数据为字符串
const requestBodyString = requestBody.toString();
console.log('原始请求体数据长度:', requestBody.length);
console.log('原始请求体数据:', requestBodyString);

// 解析 JSON 格式的请求体数据
let bodyData;
if (requestBodyString) {
  try {
    bodyData = JSON.parse(requestBodyString);
  } catch (err) {
    console.error('请求体解析错误:', err);
    console.error('解析失败的请求体:', requestBodyString);
    bodyData = null;
  }
} else {
  console.log('请求体为空');
  bodyData = null;
}

js小白,麻烦大佬有空指导下

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions