API解析Pub/Sub消息报错,如何构造正确的测试假消息数据?
问题分析
你的错误根源在于Google Pub/Sub的消息格式要求message.data是经过Base64编码的字符串,而你直接传入了原始JSON对象。当parseMessage方法执行message.data.toString()时,对象会被转为[object Object],对这个字符串做Base64解码后得到的内容完全不是合法JSON,自然触发解析错误。
正确的假Pub/Sub消息构造步骤
- 第一步:把你要传递的核心数据(即
data里的内容)转成JSON字符串:
{"from": "no-reply@example.com", "to": "user@example.com", "subject": "test", "body": "test"}
- 第二步:将这个JSON字符串做Base64编码,得到编码后的字符串:
eyJmcm9tIjoibm8tcmVwbHlAZXhhbXBsZS5jb20iLCJ0byI6InVzZXJAZXhhbXBsZS5jb20iLCJzdWJqZWN0IjoidGVzdCIsImJvZHkiOiJ0ZXN0In0=
- 第三步:把这个Base64字符串放到请求的
message.data字段中,替换原来的JSON对象。
正确的curl请求示例
curl -X 'POST' \ 'http://localhost:3000/posts' \ -H 'Content-Type: application/json' \ -d '{ "message": { "data": "eyJmcm9tIjoibm8tcmVwbHlAZXhhbXBsZS5jb20iLCJ0byI6InVzZXJAZXhhbXBsZS5jb20iLCJzdWJqZWN0IjoidGVzdCIsImJvZHkiOiJ0ZXN0In0=" } }'
额外优化建议
你的错误提示里'Parse Error: ' + message会把对象转为[object Object],不利于排查问题,可以改成JSON序列化:
throw new BadRequestException( 'Parse Error: ' + JSON.stringify(message), );
内容的提问来源于stack exchange,提问作者Alpin Cleopatra
相关产品推荐
相关产品推荐

