Node.js JavaScript AWS客户端网关API x-API-key问题
我们正在nodejs服务器上使用JavaScript AWS客户端网关API调用AWS REST API。我们有私有vpc发布的API,它需要在头中包含API密钥。这是代码。 在下面的脚本中,我有用于测试目的的硬coed API密钥Node.js JavaScript AWS客户端网关API x-API-key问题,node.js,amazon-web-services,aws-sdk,aws-api-gateway,Node.js,Amazon Web Services,Aws Sdk,Aws Api Gateway,我们正在nodejs服务器上使用JavaScript AWS客户端网关API调用AWS REST API。我们有私有vpc发布的API,它需要在头中包含API密钥。这是代码。 在下面的脚本中,我有用于测试目的的硬coed API密钥 var apigClientFactory = require('aws-api-gateway-client').default; let awsbody = JSON.parse(process.argv[2].split('\\').join('')
var apigClientFactory = require('aws-api-gateway-client').default;
let awsbody = JSON.parse(process.argv[2].split('\\').join('') || '{}');
var apigClient = apigClientFactory.newClient({
invokeUrl: awsbody.endPoint, // REQUIRED
accessKey: awsbody.awsAccessKey, // REQUIRED
secretKey: awsbody.awsSecreteKey, // REQUIRED
region: awsbody.awsRegion,
apiKey: 'vs2i50xvo4',
retryCondition: (err) => {
return err.response && err.response.status === 500;
}
});
var pathParams = awsbody.awsPathParams;
var pathTemplate = awsbody.awsPathTemplate; // '/api/v1/sites'
var method = awsbody.method; // 'POST';
var additionalParams = { queryParams: awsbody.awsAdditionalParams }; //queryParams if any
//var additionalParams = {};
var body = awsbody.requestBody;
var output = {};
apigClient.invokeApi(pathParams, pathTemplate, method, additionalParams, body)
.then(function(result) {
// return JSON.parse(result.data);
output.status = result.response.data.status,
output.message = result.response.data.message,
output.responsecode = result.response.status,
output.responsetext = result.response.statusText;
output.header = result.response.headers;
console.log(output)
}).catch(function(result) {
output.status = result.response.data.status,
output.message = result.response.data.message,
output.responsecode = result.response.status,
output.responsetext = result.response.statusText,
output.header = result.response.headers;
console.log(output)
//console.log("********** Output **************")
//console.log(result)
//return result;
});
尝试执行代码时,出现以下错误。不确定,如果上述代码中有任何错误
{ status: undefined,
message: 'Forbidden',
responsecode: 403,
responsetext: 'Forbidden',
header:
{ server: 'Server',
date: 'Tue, 12 Mar 2019 00:00:37 GMT',
'content-type': 'application/json',
'content-length': '24',
'x-amzn-requestid': 'ddce6604-4459-11e9-a23b-d1e9d6814b3a',
'x-amzn-errortype': 'ForbiddenException',
'x-amz-apigw-id': 'WZt53GORPHcFebA=',
connection: 'close' } }
问题现在解决了。这不是CORS问题,而是标题问题。我正在将附加参数中的键作为标题标记传递,它按预期工作
var apigClientFactory = require('aws-api-gateway-client').default;
let awsbody = JSON.parse(process.argv[2].split('\\').join('') || '{}');
var apigClient = apigClientFactory.newClient({
invokeUrl: awsbody.endPoint, // REQUIRED
accessKey: awsbody.awsAccessKey, // REQUIRED
secretKey: awsbody.awsSecreteKey, // REQUIRED
region: awsbody.awsRegion,
retryCondition: (err) => {
return err.response && err.response.status === 500;
}
});
var pathParams = awsbody.awsPathParams;
var pathTemplate = awsbody.awsPathTemplate; // '/api/v1/sites'
var method = awsbody.method; // 'POST';
var additionalParams = {headers: { "x-apigw-api-id": 'vs2i50xvo4'}};
var body = awsbody.requestBody;
var output = {};
apigClient.invokeApi(pathParams, pathTemplate, method, additionalParams, body)
.then(function(result) {
// return JSON.parse(result.data);
output.status = result.response.data.status,
output.message = result.response.data.message,
output.responsecode = result.response.status,
output.responsetext = result.response.statusText;
output.header = result.response.headers;
console.log(output)
}).catch(function(result) {
output.status = result.response.data.status,
output.message = result.response.data.message,
output.responsecode = result.response.status,
output.responsetext = result.response.statusText,
output.header = result.response.headers;
console.log(output)
//console.log("********** Output **************")
//console.log(result)
//return result;
});
问题现在解决了。这不是CORS问题,而是标题问题。我正在将附加参数中的键作为标题标记传递,它按预期工作
var apigClientFactory = require('aws-api-gateway-client').default;
let awsbody = JSON.parse(process.argv[2].split('\\').join('') || '{}');
var apigClient = apigClientFactory.newClient({
invokeUrl: awsbody.endPoint, // REQUIRED
accessKey: awsbody.awsAccessKey, // REQUIRED
secretKey: awsbody.awsSecreteKey, // REQUIRED
region: awsbody.awsRegion,
retryCondition: (err) => {
return err.response && err.response.status === 500;
}
});
var pathParams = awsbody.awsPathParams;
var pathTemplate = awsbody.awsPathTemplate; // '/api/v1/sites'
var method = awsbody.method; // 'POST';
var additionalParams = {headers: { "x-apigw-api-id": 'vs2i50xvo4'}};
var body = awsbody.requestBody;
var output = {};
apigClient.invokeApi(pathParams, pathTemplate, method, additionalParams, body)
.then(function(result) {
// return JSON.parse(result.data);
output.status = result.response.data.status,
output.message = result.response.data.message,
output.responsecode = result.response.status,
output.responsetext = result.response.statusText;
output.header = result.response.headers;
console.log(output)
}).catch(function(result) {
output.status = result.response.data.status,
output.message = result.response.data.message,
output.responsecode = result.response.status,
output.responsetext = result.response.statusText,
output.header = result.response.headers;
console.log(output)
//console.log("********** Output **************")
//console.log(result)
//return result;
});
您是否为请求设置了适当的CORS accept-*标题?您是否为请求设置了适当的CORS accept-*标题?