JavaScript AWS 客户端网关 API x-api-key 问题

JavaScript AWS Client gateway API x-api-key issue

我们正在 nodejs 服务器上使用 JavaScript AWS 客户端网关 API 调用 AWS REST API。我们发布了私有 vpc API,需要 API 输入 header。这是代码。 我在下面的脚本中硬编码 API 用于测试目的的密钥。

    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 问题,而是 header 问题。我将附加参数中的密钥作为 header 标记传递,它按预期工作。

 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;
    });