2017-06-03 128 views
1

我調用下面的節點代碼AWS API調用網關AWS API網關:如何正確地從節點

module.exports = function(app) { 

    var apigClientFactory = require('aws-api-gateway-client').default; 

    var querystring = require('querystring'); 



    var params = { 
     //This is where any header, path, or querystring request params go. The key is the parameter named as defined in the API 
     userId: '1234' 
    }; 
    var additionalParams = {}; 

    app.get('*', function(req, res) { 
     res.sendfile('./public/index.html'); 
    }); 

    app.post("/customerinfo", function(req, res) { 
     console.log("name: " + req.body["customer_name"]); 

     var body = {"async": true, 
      "crossDomain": true, 
      "url": "https://myurl.execute-api.us-west-2.amazonaws.com/staging/api", 
      "method": "POST", 
      "headers": { 
      "cache-control": "no-cache" 
     }, 
     "data": querystring.stringify(req.body["customer_name"]) 
    }; 
     var apigClient = apigClientFactory.newClient({ 
      apiKey: '1234', 
      invokeUrl:'https://myurl.execute-api.us-west-2.amazonaws.com/staging/api' 
     }); 

     apigClient.invokeApi(params, body, additionalParams) 
      .then(function(result){ 
       // Add success callback code here. 
      }).catch(function(result){ 
      // Add error callback code here. 
     }); 
    }); 

}; 

我得到以下錯誤:

TypeError: method.toUpperCase is not a function 
    at Object.apigClientFactory.newClient.apigClient.invokeApi (/Users/eugene/Desktop/dms/node_modules/aws-api-gateway-client/dist/apigClient.js:117:20) 
    at Object.handle (/Users/eugene/Desktop/dms/app/routes.js:36:20) 
    at next_layer (/Users/eugene/Desktop/dms/node_modules/express/lib/router/route.js:113:13) 
    at Route.dispatch (/Users/eugene/Desktop/dms/node_modules/express/lib/router/route.js:117:5) 
    at /Users/eugene/Desktop/dms/node_modules/express/lib/router/index.js:222:24 
    at Function.proto.process_params (/Users/eugene/Desktop/dms/node_modules/express/lib/router/index.js:288:12) 
    at next (/Users/eugene/Desktop/dms/node_modules/express/lib/router/index.js:216:19) 
    at next (/Users/eugene/Desktop/dms/node_modules/express/lib/router/index.js:202:18) 
    at Layer.staticMiddleware [as handle] (/Users/eugene/Desktop/dms/node_modules/serve-static/index.js:51:61) 
    at trim_prefix (/Users/eugene/Desktop/dms/node_modules/express/lib/router/index.js:263:17) 
    at /Users/eugene/Desktop/dms/node_modules/express/lib/router/index.js:225:9 
    at Function.proto.process_params (/Users/eugene/Desktop/dms/node_modules/express/lib/router/index.js:288:12) 
    at next (/Users/eugene/Desktop/dms/node_modules/express/lib/router/index.js:216:19) 
    at Layer.methodOverride [as handle] (/Users/eugene/Desktop/dms/node_modules/method-override/index.js:75:5) 
    at trim_prefix (/Users/eugene/Desktop/dms/node_modules/express/lib/router/index.js:263:17) 
    at /Users/eugene/Desktop/dms/node_modules/express/lib/router/index.js:225:9 

什麼最合適方法來做到這一點,以避免得到這個錯誤?

+0

你聯繫過圖書館維護人員嗎? https://github.com/kndt84/aws-api-gateway-client –

回答

1

傳遞給invokeApi方法的參數不是客戶端中預期的方法簽名。它應該是這樣的,

module.exports = function(app) { 

    var apigClientFactory = require('aws-api-gateway-client').default; 

    var querystring = require('querystring'); 



    var params = { 
     //This is where any header, path, or querystring request params go. The key is the parameter named as defined in the API 
     userId: '1234' 
    }; 
    var additionalParams = {}; 

    app.get('*', function(req, res) { 
     res.sendfile('./public/index.html'); 
    }); 

    app.post("/customerinfo", function(req, res) { 
     console.log("name: " + req.body["customer_name"]); 

     var body = { 
      "async": true, 
      "crossDomain": true, 
      "url": "https://myurl.execute-api.us-west-2.amazonaws.com/staging/api", 
      "method": "POST", 
      "headers": { 
       "cache-control": "no-cache" 
      }, 
      "data": querystring.stringify(req.body["customer_name"]) 
     }; 
     var apigClient = apigClientFactory.newClient({ 
      apiKey: '1234', 
      invokeUrl: 'https://myurl.execute-api.us-west-2.amazonaws.com/staging/api' 
     }); 

>>>> apigClient.invokeApi(params, '/customerinfo', 'POST', additionalParams, body) 
      .then(function(result) { 
       // Add success callback code here. 
      }).catch(function(result) { 
       // Add error callback code here. 
      }); 
    }); 

}; 

我希望它有幫助。

0

您可能需要仔細檢查您的參數invokeApi。它應該是: apigClient.invokeApi(params,pathTemplate,method,additionalParams,body)