2016-08-17 2 views
2

Я новичок в NodeJS и JS в целом (в основном, PHP и C# guy), поэтому я мог бы действительно использовать некоторую помощь с этой функцией ниже.Node.JS Функция Lambda не возвращается JSON

Целью является получение полезной нагрузки JSON, подключение к MySQL и возврат результатов запроса в ответ JSON. Я подключил его к БД, я могу прочитать данные JSON, которые он получает (event.fieldname), но по какой-то причине он не отправляет JSON для переменной request_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 ('Row Details:', JSON.stringify (res));' –

+0

Вызов через API-шлюз. – 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

Привет @ джон-сиу, К сожалению, это не работает, как ожидалось .. . Я пробовал раньше :-) что он посылает обратно ниже со скобками до и после того, как ... не совсем JSON :-( [ { "applicant_id": "WQFV7CWXA39E9TXT" } ] – Josh

+0

Если я возвращаю переменную JSON заявителя_data вне функции обратного вызова, она возвращает данные, как я ожидал бы, без скобок. – Josh

+0

@Josh Это JSON, но завернутый в arr ау. Данные находятся в первом элементе массива. –

Смежные вопросы