Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 进行查询/更改时发生Vanilla NodeJS Appsync客户端错误_Node.js_Json_Amazon Web Services_Graphql_Aws Appsync - Fatal编程技术网

Node.js 进行查询/更改时发生Vanilla NodeJS Appsync客户端错误

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

我正在尝试使用一个普通的nodejs客户端来访问我的Appsync GraphQL端点,该客户端可以签名并发送请求。这是:

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格式