Node.js 进行查询/更改时发生Vanilla NodeJS Appsync客户端错误
我正在尝试使用一个普通的nodejs客户端来访问我的Appsync GraphQL端点,该客户端可以签名并发送请求。这是:Node.js 进行查询/更改时发生Vanilla NodeJS Appsync客户端错误,node.js,json,amazon-web-services,graphql,aws-appsync,Node.js,Json,Amazon Web Services,Graphql,Aws Appsync,我正在尝试使用一个普通的nodejs客户端来访问我的Appsync GraphQL端点,该客户端可以签名并发送请求。这是: var https=require(“https”); 设AWS=require(“AWS sdk”); 让urlParse=require(“url”).url; require(“dotenv”).config(); 常量throwOnErrors=({query,variables,errors})=>{ 如果(错误){ 常量错误消息=` 查询:${query.sub
var https=require(“https”);
设AWS=require(“AWS sdk”);
让urlParse=require(“url”).url;
require(“dotenv”).config();
常量throwOnErrors=({query,variables,errors})=>{
如果(错误){
常量错误消息=`
查询:${query.substr(01100)}
变量:${JSON.stringify(变量,null,4)}
错误:${JSON.stringify(错误,null,4)}
`;
抛出新错误(errorMessage);
}
};
module.exports=async(
网址,
资格证书
查询
操作名称,
变量={}
) => {
AWS.config.update({
地区:process.env.AWS_地区,
凭证:新AWS.credentials(
credentials.accessKeyId,
credentials.secretAccessKey,
会话肯
),
});
让endpoint=newurlparse(url).hostname.toString();
常数项={
输入:变量
};
let req=new AWS.HttpRequest(url,process.env.AWS_区域);
req.method=“POST”;
req.headers.host=端点;
请求头[“内容类型”]=“应用程序/json”;
req.body=JSON.stringify({
查询:查询,
operationName:operationName,
变量:项目
});
让signer=new AWS.Signers.V4(req,“appsync”,true);
signer.addAuthorization(AWS.config.credentials,AWS.util.date.getDate());
常量数据=等待新承诺((解决、拒绝)=>{
const httpRequest=https.request({…req,主机:端点},(结果)=>{
结果.on(“数据”,(数据)=>{
resultdata=JSON.parse(data.toString());
if(resultdata.errors!=null){
错误(查询、变量、数据);
拒绝(结果数据);
}否则{
解析(结果数据);
}
});
结果.on(“错误”,(数据)=>{
拒绝(()=>{
错误(查询、变量、数据)
返回JSON.parse(data.toString())
});
});
});
httpRequest.write(请求正文);
httpRequest.end();
});
返回数据。返回数据
};
不幸的是,有时响应确实会被拒绝,错误总是这样:
SyntaxError: Unexpected token , in JSON at position 0
at JSON.parse (<anonymous>)
56 | result.on("data", (data) => {
57 |
> 58 | resultdata = JSON.parse(data.toString());
| ^
59 | if (resultdata.errors != null) {
60 | throwOnErrors(query, variables, data);
61 | reject(resultdata);
at IncomingMessage.<anonymous> (_tests/lib/graphql.js:58:27)
SyntaxError:JSON中位置0处的意外标记
在JSON.parse()处
56 |结果.关于(“数据”,(数据)=>{
57 |
>58 | resultdata=JSON.parse(data.toString());
| ^
59 |如果(resultdata.errors!=null){
60 |错误(查询、变量、数据);
61 |拒绝(结果数据);
输入消息时。(_tests/lib/graphql.js:58:27)
我真的不知道如何解决这个问题,因为有时候承诺得到了解决,有时候没有
你们有什么建议给我吗
提前感谢!您的
'data'
回调可以运行多次,结果是一个流,所以
const httpRequest = https.request({ ...req, host: endpoint }, (result) => {
result.on("data", (data) => {
resultdata = JSON.parse(data.toString());
if (resultdata.errors != null) {
throwOnErrors(query, variables, data);
reject(resultdata);
} else {
resolve(resultdata);
}
});
result.on("errors", (data) => {
reject(() => {
throwOnErrors(query, variables, data)
return JSON.parse(data.toString())
});
});
});
需要更像
const httpRequest = https.request({ ...req, host: endpoint }, (response) => {
const chunks = [];
response.on("data", (data) => { chunks.push(data); });
response.on("end", () => {
resultdata = JSON.parse(Buffer.concat(chunks).toString());
if (resultdata.errors != null) {
throwOnErrors(query, variables, data);
reject(resultdata);
} else {
resolve(resultdata);
}
});
response.on("error", err => {
reject(() => {
throwOnErrors(query, variables, data)
return JSON.parse(data.toString())
});
});
});
检查网络选项卡-响应不是json格式