2016-08-26 5 views
5

ラムダ関数内のサーバーから取得したXMLストリングをJSONに変換しようとしています。
DynamoDBを使用してサーバーから取得したXML回答をシミュレートするために、この簡単な例を設定しました。外部のjsライブラリを使用してAmazon LambdaのJSONにXMLをパースする

'use strict'; 

var AWS = require('aws-sdk'); 
var docClient = new AWS.DynamoDB.DocumentClient({region: 'eu-west-1'}); 


exports.handler = function (e, ctx, callback){  
    let table = "dsbTable"; 
    let bpNumber = 1337; 
    var test; 
    var x2js = new X2JS(); 
    let params = { 
      TableName: table, 
      Key:{ 
       "bpNumber": bpNumber 
      }, 
     }; 
    docClient.get(params, function(err, data) { 
      if (err) { 
       console.error("Unable to read item. Error JSON:", JSON.stringify(err, null, 2)); 
       callback(err, null); 
      } else { 
       console.log("GetItem succeeded:", JSON.stringify(data, null, 2)); 
       console.log('test' +data.Item.getBp); 
       //var jsonObj = x2js.xml_str2json(data.Item.getBp); 
       //console.log(jsonObj); 

       callback(null, data); 
      } 

    }); 

} ; 

アイテムを得ることがうまく動作し、今、この

{ 
    "Item": { 
    "getBp": "<message version=\"1.0\" system=\"AVS/3\"><header><client>553</client><avs3-sales-organization>7564</avs3-sales-organization><avs3-service-provider>DSD</avs3-service-provider></header><body><business-partner><salutation-code>01</salutation-code><titel-code-academic/><titel-academic/><titel-code-royal/><titel-royal/><job-titel/><last-name1>Pickle</last-name1><last-name2/><first-name>N</first-name><street/><street-suffix/><street-number/><street-number-suffix/><address-line-1>10 Waterside Way</address-line-1><address-line-2/><address-line-3/><zipcode>NN4 7XD</zipcode><country-code>GB</country-code><city>NORTHAMPTON</city><district/><region-code>NH</region-code><region-text>Northamptonshire</region-text><company1/><company2/><company3/><department/><po-box/><po-box-zipcode/><po-box-city/><po-box-country-code/><major-customer-zipcode/><address-source/><advertisement>Y</advertisement><category/><bp-number>1100000772</bp-number><bp-number-external/><bp-group>ABON</bp-group><eu-sales-tax-number/><bic-master-number/><sector/><communication><communication-type>WW</communication-type><communication-value>[email protected]</communication-value><communication-default>Y</communication-default></communication><attribute><attribute-type>ACC</attribute-type><attribute-value>Y</attribute-value></attribute><attribute><attribute-type>OIEMEX</attribute-type><attribute-value>N20121211</attribute-value></attribute><attribute><attribute-type>OINLIN</attribute-type><attribute-value>N20121211</attribute-value></attribute><attribute><attribute-type>OISMEX</attribute-type><attribute-value>N20121211</attribute-value></attribute><attribute><attribute-type>OISMIN</attribute-type><attribute-value>N20121211</attribute-value></attribute><attribute><attribute-type>OOEMIN</attribute-type><attribute-value>N20121211</attribute-value></attribute><attribute><attribute-type>OOFXEX</attribute-type><attribute-value>N20121211</attribute-value></attribute><attribute><attribute-type>OOFXIN</attribute-type><attribute-value>N20121211</attribute-value></attribute><attribute><attribute-type>OOPTEX</attribute-type><attribute-value>N20121211</attribute-value></attribute><attribute><attribute-type>OOPTIN</attribute-type><attribute-value>N20121211</attribute-value></attribute><attribute><attribute-type>OOTEEX</attribute-type><attribute-value>N20121211</attribute-value></attribute><attribute><attribute-type>OOTEIN</attribute-type><attribute-value>N20121211</attribute-value></attribute><attribute><attribute-type>THEDSU</attribute-type><attribute-value/></attribute></business-partner></body></message>", 
    "bpNumber": 1337 
    } 
} 

私の主な問題のよう返されます(現在、私はちょうど行くconvertionを取得しようとしていることは)私は方法を見つけ出すことができないということですthis one here

この場合のコードは完全に無益ではないと思いますが、かなり単純な解決策があります。

+1

'var jsonObj = x2js.xml_str2json(data.Item.getBp)'は動作しません。私はあなたがJSファイルを参照していないと思う。 –

+0

まず、お時間をいただきありがとうございます。まあ、それはおそらく理由です。私はラムダ関数の中でそれをどのように参照するのか分かりません。私はAWSのこと全体に非常に新しいです。その問題についてはjavascriptを使用しています...おそらくラムダが外部ライブラリにアクセスできるようにしようとする必要がありますhttp://docs.aws.amazon.com/de_de/lambda/latest/dg/nodejs- create-deployment-pkg.htmlを参照してください。私はラムダ関数内のxml2jsonライブラリからコードを貼り付けようとしましたが、それはちょうどたくさんのエラーをスローします: -/ –

+0

このリンクをチェックしてください:http://stackoverflow.com/questions/950087/how-to-include-a -javascript-file-in-another-javascript-file –

答えて

10

あなたは多くの新しいラムダユーザーが行った道を歩いています。

ラムダでは、絶対に簡単です。あなたのコードを書いて、それが期待どおりに動作することを検証するだけです。 - あなたのコンピュータではを意味します。

あなたはそれを検証した後、次のように実行します。

  1. は、node_modulesディレクトリ、あなたが使用するすべての依存関係含むをフォルダ全体の内容をzip形式で圧縮します。
  2. ラムダにアップロードしてください。

誤っにも入っているフォルダをzip形式で圧縮した場合、それは結構です、だけからスクリプトを実行するためにラムダを更新してください:dir_name/file_name.function_name(あなたのモジュールからfunction_nameをエクスポートすることを忘れないでください)。

+0

ありがとう、これは働いた。しかし、もちろん一つのことを修正して、私に次のエラーを与えました。私が投稿したxml2jsonライブラリを使用すると、 "ReferenceError:window is not defined"というメッセージが表示されました。 Apperentlyこれは私がサーバサイドでクライアント側のスクリプトを試していたからです(?)、私は別のライブラリを使用してそれを回避することができました。 –

+0

これは別の質問です:)。あなたはそれを投稿し、あなたが使ったコードを貼り付けることができます。私はそれを見ます。新しい投稿へのリンクをここに貼り付けてください。 – johni

+0

良い。他のライブラリを使用することは、今のところうまくいきます。再度、感謝します –

0

常にハンドラ名は<filename>.<handler>です。また、filenameが間違って記載されている場合は、そのようなエラーがクラウドウォッチログにスローされます。

関連する問題