2017-09-22 12 views
0

私はノードサーバーアプリケーションを持っています。承認のためにノードプラグインaws2を使用してAWS Simple Db内のアイテムをリストする。AWS SimpleDB js APIコール

var aws2 = require('aws2'); 

var opts = {service: 'sdb', 
      path: '/?Action=ListDomains&Version=2009-04-15&MaxNumberOfDomains=2&NextToken=', 
      region: 'eu-west-1'} 

aws2.sign(opts, { 
      secretAccessKey: "<secrtet-key>", 
      accessKeyId: "<access-key-id>"}) 

です。

http.request(opts, function(request) 
{ 
    request.pipe(process.stdout); 
    // res.send(process.stdout); 
}).end() 

これは問題なく動作します。

<?xml version="1.0" encoding="UTF-8"?> 
<ListDomainsResponse xmlns="http://sdb.amazonaws.com/doc/2009-04-15/"> 
    <ListDomainsResult> 
     <DomainName>db1</DomainName> 
     <DomainName>db2</DomainName> 
     </ListDomainsResult> 
     <ResponseMetadata> 
    <RequestId>46df0bd2-2ed8-de4b-5df8-ad602eda72c9</RequestId> 
    <BoxUsage>0.0000071759</BoxUsage> 
    </ResponseMetadata> 
</ListDomainsResponse> 

私が抱えている問題は、XMLが返されるまで要求が一時停止するという以前の投稿で解決した問題です。

以前はノード要求パッケージで問題を解決しました。

request(url, function (error, response, body) { 

    if (!error && response.statusCode == 200) { 

     parseString(body, function (err, result) { 
      console.log(JSON.stringify(result)); 
     }); 

     // from within the callback, write data to response, essentially returning it. 
     res.send(body); 
    } 
    else { 
     // console.log(JSON.stringify(response)); 
    } 
}) 

私が苦労しているのは、http.requestが要求するのと同じように動作するようになっていることです。

これは可能ですか? optsオブジェクトからURLを作成してリクエストに渡してみましたが、「リクエストした署名は、指定した署名と一致しません」

誰かが私に必要なことについてアドバイスできますか?ありがとう。

答えて

0

溶液が見つかりました。

var opts = { 
    service: 'sdb', 
    path: '/?Action=ListDomains&Version=2009-04-15&MaxNumberOfDomains=2&NextToken=', 
    region: this.accessData.region 
} 

//read this in from a file (encrypted?) 
aws2.sign(opts, { 
    secretAccessKey: this.accessData.secretAccessKey, 
    accessKeyId: this.accessData.accessKeyId 
}) 

var req = http.request(opts, function (resp) { 

    resp.setEncoding('utf8'); 
    resp.on('data', function (chunk) { 
     if (debug) { console.log('domains : ' + chunk) }; 

     listDomainMetaData('name', function (metad) { 
      if (debug) { console.log("metad: " + metad) }; 

      res.send(chunk + metad); 

     });    

    }); 
}); 

req.on('error', function (e) { 
    if (debug) { console.log('problem with request: ' + e.message) }; 
}); 

// write data to request body 
req.write('data\n'); 
req.write('data\n'); 
req.end();