Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.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 JavaScript AWS客户端网关API x-API-key问题_Node.js_Amazon Web Services_Aws Sdk_Aws Api Gateway - Fatal编程技术网

Node.js JavaScript AWS客户端网关API x-API-key问题

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('')

我们正在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 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-*标题?