2016-08-17 10 views
2

私はNodeJSとJS(一般的にはPHPとC#の人)を使い慣れていません。Node.JS JSONを返さないラムダ関数

目的は、JSONペイロードを受け取り、MySQLに接続して、その結果をJSON応答で返すことです。私はそれをDBに接続して、それが受け取ったJSONデータ(event.fieldname)を読むことができますが、何らかの理由でJSONにapplicant_data変数を返信していません。

変数が間違った場所にあるだけですか?以下のコードを実行すると、返されたデータとして「{}」が返されます。

ありがとうございました!

NodeJSコード:

exports.handler = function(event, context, callback) { 
console.log('Starting:'); 
console.log("Request received:\n", JSON.stringify(event)); 

var mysql = require('mysql'); 



var jsonconnection = mysql.createConnection({ 
    host: 'servername', 
    user: 'username', 
    password: 'password', 
    database: 'database' 
}); 

jsonconnection.connect(); 
console.log('Connected to MySQL:'); 

jsonconnection.query('SELECT applicant_id FROM customers WHERE applicant_id = \'' + event.applicant_id + '\'', 
    function(err,res){ 
    if(err) throw err; 

    console.log('Row Details:', JSON.stringify(res)); 
     var applicant_data = { 
      applicant_id : res.applicant_id 
     }; 

    jsonconnection.end(); 

    context.succeed(applicant_data); 
}) 
}; 
+0

ラムダ関数をどのように呼び出していますか? APIゲートウェイ経由ですか?またはAWS SDK経由で直接入手できますか? –

+0

'console.log( '行の詳細:'、JSON.stringify(res));' –

+0

行の出力を追加してください。 'にconsole.logから – Josh

答えて

2

は私がAWSに慣れていないけど、ベースhttp://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.htmlに、次のコードが動作する可能性があります。

exports.handler = function (event, context, callback) { 
    console.log('Starting:'); 
    console.log("Request received:\n", JSON.stringify(event)); 

    var mysql = require('mysql'); 

    var jsonconnection = mysql.createConnection({ 
     host: 'servername', 
     user: 'username', 
     password: 'password', 
     database: 'database' 
    }); 

    // Move applicant_data outside of query as it will be needed at the end in callback 
    var applicant_data = {}; 

    jsonconnection.connect(); 
    console.log('Connected to MySQL:'); 

    jsonconnection.query('SELECT applicant_id FROM customers WHERE applicant_id = \'' + event.applicant_id + '\'', 
     function (err, res) { 
      if (err) throw err; 

      console.log('Row Details:', JSON.stringify(res)); 
      applicant_data = { 
       // Only use first row of data 
       applicant_id: res[0].applicant_id; 
      }; 

     }); 

    // Move connection end out side of query 
    jsonconnection.end(); 

    // This should return your data, in JSON form 
    callback(null, JSON.stringify(applicant_data)); 

    // I assume this is the correct use for succeed 
    context.succeed(); 
}; 
+0

こんにちは@ジョン-SIU、 残念ながら期待通りに動作しません。.. 。私が試した以前:-) 前と後...ではない正確にJSON :-(ブラケットと、次は何それは送り返すことである[ { "applicant_id": "WQFV7CWXA39E9TXT" } ] – Josh

+0

私がコールバック関数の外でapplicant_data JSON変数を返すと、ブラケットなしで期待通りのデータが返されます。 – Josh

+0

@Josh JSONですが、arrでラップされていますay。データは配列の最初の項目にあります。 –

関連する問題