SendGrid API一次查询多分类邮件统计返回400错误如何解决?
问题根因
- 配置执行顺序错误:
setApiKey()方法会重置SendGrid客户端的所有默认请求配置,先设置数组序列化规则再调用setApiKey(),会导致前面的qsStringifyOptions配置被覆盖失效,数组格式的categories参数无法被正确序列化为API要求的格式,触发400错误。 - SendGrid多分类统计接口要求多个分类参数必须以重复参数名的形式传递(格式为
categories=cat1&categories=cat2),配置失效时数组会被默认序列化为categories[]=cat1&categories[]=cat2的格式,不符合接口要求。
修复方案
调整两个配置的调用顺序,先调用setApiKey(),再设置数组序列化规则,修改后代码如下:
const client = require('@sendgrid/client') // 先设置API Key,避免覆盖后续的序列化配置 client.setApiKey(process.env.SENDGRID_API_KEY) // 再设置数组序列化规则 client.setDefaultRequest('qsStringifyOptions', {arrayFormat: 'repeat'}); const request = {} const queryParams = { 'aggregated_by': 'day', 'categories': ['cat1', 'cat2'], 'start_date': '2021-08-01', 'end_date': '2021-09-01', 'limit': 5, 'offset': 1 }; request.qs = queryParams; request.method = 'GET'; request.url = '/v3/categories/stats'; client .request(request) .then(([response, body]) => { console.log(response.statusCode); console.log(response.body); }).catch(function (error) { // 可打印完整错误详情排查问题 console.log(error.response?.body?.errors || error) })
补充注意事项
- 该接口单次查询最多支持传入10个分类,超过限制也会返回400错误。
- 遇到错误时可在catch块中打印
error.response.body.errors查看具体错误提示,比默认的简略报错信息更有排查价值。
内容的提问来源于stack exchange,提问作者Saki
相关产品推荐
相关产品推荐

