ES6前JS引擎中GraphQL查询变量拼接报错求助
解决ES5环境下GraphQL查询中日期变量拼接的问题
问题根源
直接拼接Date对象时,JS会将其转换为默认的人类可读字符串(如Wed Feb 01 2023 14:47:24 GMT+0800 (中国标准时间)),这不符合GraphQL要求的ISO 8601格式日期字符串,且未用引号包裹,导致查询语法错误,返回422 Unprocessable Entity。另外原查询中audience对象后缺少逗号,也会破坏GraphQL的结构语法。
解决方案
- 将
Date对象转换为ISO 8601格式字符串:使用publishDate.toISOString()方法 - 为日期字符串添加引号(GraphQL字符串类型必须用引号包裹),保持和原有代码一致的
"实体转义 - 补充
audience对象后的逗号,修复查询结构
修改后的代码
var today = new Date(); var publishDate = new Date(new Date().setDate(today.getDate() - 31)); // 格式化日期为ISO字符串并添加引号转义 var formattedPublishDate = '"' + publishDate.toISOString() + '"'; const query = JSON.stringify({query: '{' + ' all_insight_article(locale: "en-gb"'+ ' where: {business_unit: {business_unit: {title: "Capital"}, MATCH: ALL}, audience: {MATCH: ALL, audiences: {title: "Management"}}, publish_date_gt:' + formattedPublishDate + '}'+ ' ) {items {'+ ' system {uid publish_details {time} updated_at}'+ ' absolute_url title subtitle main_image'+ ' audienceConnection {edges {node {... on Audiences {title system {uid}}}}}'+ ' article_typeConnection {edges {node {... on ArticleType {title}}}}'+ ' topicsConnection {edges {node {... on Topics {title display_name system {uid}}}}}}total}}' });
关键改动说明
formattedPublishDate变量:把日期转为GraphQL可识别的ISO格式,并用"包裹,确保是合法的字符串类型参数- 补充
audience对象后的逗号:修复查询结构的语法错误,避免因格式问题触发422错误
内容的提问来源于stack exchange,提问作者David Garcia
相关产品推荐
相关产品推荐

