Javascript 输入意外结束:从AWS API网关获取响应时出现客户端错误
我在Angualar应用程序中使用Apollo,现在我正在讨论这个问题。我在AWS Lambda上有一个GraphQL端点,通过API网关,我看到响应正确返回,但当它通过读取时,会抛出此错误。AWS正在使用LAMBDA_代理Javascript 输入意外结束:从AWS API网关获取响应时出现客户端错误,javascript,amazon-web-services,angular,graphql,apollo,Javascript,Amazon Web Services,Angular,Graphql,Apollo,我在Angualar应用程序中使用Apollo,现在我正在讨论这个问题。我在AWS Lambda上有一个GraphQL端点,通过API网关,我看到响应正确返回,但当它通过读取时,会抛出此错误。AWS正在使用LAMBDA_代理 //setup const client = new ApolloClient({ networkInterface: createNetworkInterface({ opts: { mode: 'no-cors', }, uri:
//setup
const client = new ApolloClient({
networkInterface: createNetworkInterface({
opts: {
mode: 'no-cors',
},
uri: "https://xxxxxxx.execute-api.ap-southeast-2.amazonaws.com/dev/graphql"
}),
});
//make the call
this.apollo.watchQuery({
forceFetch: true,
query: QueryToSend
}).subscribe(({data}) => {
...process...
}, error => {
console.log(error);
});
//the error...
Network error: Unexpected end of input
at new ApolloError (ApolloError.js:31)
at QueryManager.js:128
at t.invoke (polyfills.js:3)
at Object.onInvoke (ng_zone.js:236)
at t.invoke (polyfills.js:3)
at e.run (polyfills.js:3)
at polyfills.js:3
at t.invokeTask (polyfills.js:3)
at Object.onInvokeTask (ng_zone.js:227)
at t.invokeTask (polyfills.js:3)
请求是
const QueryToSend= gql`
query data {
getSuperDefinitionList{
id,
name,
}
}
`;
不知道怎么了。我从Postman和SoapUI调用相同的请求体。我甚至看到小提琴手的反应是正确的
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: ...
Connection: keep-alive
Date: Fri, 13 Jan 2017 21:10:10 GMT
x-amzn-RequestId: ab0fghjghja-d9d4-11e6-b19a-090dsfvdgcebe
X-Amzn-Trace-Id: Root=1-58794232-c7f7157d28e033330dbbe6f2
X-Cache: Miss from cloudfront
Via: 1.1 a1d4b598e9b2fghjgfhj3991961a666a6.cloudfront.net (CloudFront)
X-Amz-Cf-Id: XHeOfghjfghjUthDPKxVbCrFoLM4iOYpf9X9mWlu2Z374grmuAv5jMjg==
{"data":{"getSuperDefinitionList":[{"id":"83d3b09f-a947-4a33-bcb0-f5c9e0446ace","name":"S","__typename":"SuperDefinitionType"}]}}
从AWS看来一切正常,但Apollo或它使用的一些javascript库则不然
我能做什么呢?写完这篇文章后,我有一种预感 我搬走了
opts: {
mode: 'no-cors',
},
并确保返回了正确的标题(省略了最后3个):
var response=新的APIGatewayProxyResponse
{
StatusCode=result.result.IsError?(int)HttpStatusCode.BadRequest:(int)HttpStatusCode.OK,
Body=result.result.Body,
Headers=新字典{
{“内容类型”,“应用程序/json”},
{“访问控制允许来源”,“*”},
{“访问控制允许方法”、“获取、发布、选项”},
{“访问控制允许标头”、“连接、主机、来源、引用器、访问控制请求方法、访问控制请求标头、用户代理、接受、内容类型、授权、内容长度、X-Requested-With、接受编码、接受语言”},
}
};
var response = new APIGatewayProxyResponse
{
StatusCode = result.Result.IsError ? (int)HttpStatusCode.BadRequest : (int)HttpStatusCode.OK,
Body = result.Result.Body,
Headers = new Dictionary<string, string> {
{ "Content-Type", "application/json" },
{ "Access-Control-Allow-Origin", "*" },
{ "Access-Control-Allow-Methods", "GET,POST,OPTIONS" },
{ "Access-Control-Allow-Headers", "Connection, Host, Origin, Referer, Access-Control-Request-Method, Access-Control-Request-Headers, User-Agent, Accept, Content-Type, Authorization, Content-Length, X-Requested-With, Accept-Encoding, Accept-Language" },
}
};