2017-01-16 58 views
1

我想一些JSON数据(提取来源DaynamoDB)发送到从AWS拉姆达功能的其他服务器,但同时也让URL脚本:如何JSON数据发布到由拉姆达脚本另一台服务器

'use strict'; 

const https = require('https'); 

exports.handler = (event, context, callback) => { 

     var options = { 
     hostname: 'https://www.corecomputersystem.com', 
     path: '/getSyncData.php', 
     port : 432, 
     method: 'POST', 
     headers: { 
      'Content-Type': 'application/json', 
     } 
    }; 
    event.Records.forEach((record) => { 

     console.log(record.eventID); 
     console.log(record.eventName); 
     console.log('DynamoDB Record: %j', record.dynamodb); 
     var res = record.dynamodb; 

     const req = https.request(options, (res) => { 
     let body = ""; 
     console.log('Status:', res.statusCode); 
     console.log('Headers:', JSON.stringify(res.headers)); 
     res.setEncoding('utf8'); 
     res.on('data', (chunk) => body += chunk); 
     res.on('end',() => { 
      console.log('Successfully processed HTTPS response'); 
      // If we know it's JSON, parse it 
      if (res.headers['content-type'] === 'application/json') { 
       body = JSON.parse(body); 
      } 
      callback(null, body); 
     }); 
    }); 
    req.on('error', callback); 
    req.write(JSON.stringify(event.data) + ""); 
    req.end(); 
    //context.succeed(); 
    }); 

};

它抛出下面的错误,

{ 
    "errorMessage": "getaddrinfo ENOTFOUND https://www.corecomputersystem.com https://www.corecomputersystem.com:432", 
    "errorType": "Error", 
    "stackTrace": [ 
    "errnoException (dns.js:26:10)", 
    "GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:77:26)" 
    ] 
} 

,如果我取消了context.succeed(),没有错误,我需要确定错误的帮助。

回答

0

从主机名变量中删除https://。

var options = { 
    hostname: 'www.corecomputersystem.com', 
    path: '/getSyncData.php', 
    port : 432, 
    method: 'POST', 
    headers: { 
     'Content-Type': 'application/json', 
} 

参见docs

+0

我试图删除它,但再次新的错误我得到了一句话:{ “的errorMessage”: “连接ECONNREFUSED 173.236.36.194:432”, “ERRORTYPE”: “错误”, “堆栈跟踪”: “对象“.exports._errnoException(util.js:870:11)”, “exports._exceptionWithHostPort(util.js:893:20)”, “TCPConnectWrap.afterConnect [as oncomplete](net.js:1062:14)” ] } – Ashish

+0

我都试过,但它再次开始给了一个错误:{ “的errorMessage”: “连接ECONNREFUSED 173.236.36.194:432”, “ERRORTYPE”: “错误”, “堆栈跟踪”: “ Object.e “xports._errnoException(util.js:870:11)”, “exports._exceptionWithHostPort(util.js:893:20)”, “TCPConnectWrap.afterConnect [as oncomplete](net.js:1062:14)” ] } – Ashish

+0

你确定你有端口吗?它不是标准的https端口。 https应该是443 – at0mzk

0

只要深深地用@ at0mzk表示,主机名永远不会带任何端口号,所以像[http,https,smb,nfs]://这样的任何前缀都会在请求主机名的地方抛出错误。

http://localhost ===本地主机:80)

0

使HTTPS请求之前,我们可以使用:

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; 

,所以它不会要求授权。

0

另一种方式我们就可以请求HTTP之前选项添加一个关键:

rejectUnauthorized: false 

它不会要求自己asigned证书。

这就是我正在寻找的。

相关问题