Невозможно вернуть результаты запроса mysql db в функции Netlify Lambda - PullRequest
0 голосов
/ 12 февраля 2020

Я работаю Репозиторий демо-проекта netlify Я добавил новую лямбда-функцию mytest.js.

В mytest Я подключаюсь к mysql дБ и пытаюсь вернуть результаты запроса.

const mysql = require('mysql')
const pool = mysql.createPool({ ...config data... })

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

  context.callbackWaitsForEmptyEventLoop = false

  try {
    pool.getConnection(function(err, connection) {
      connection.query('SELECT * FROM mytable order by DatePublished desc', function(error, results, fields) {
        connection.release()

          if (error) {
            console.log('calling callback with error')
            callback(error);
          }
          else {
            console.log(`calling callback with results`)
            console.log(results);
            callback(null, {
              statusCode: 200,
              body: results
            })
          }             
      })
    })
  } 
  catch (e) {
      console.log('errored in try catch')
      console.log(e)
  } 
}

Когда я разверну это и нажму на URL, я вижу запрос к базе данных выполнен успешно, и я вижу, что результаты вышли из системы (в журналах веб-интерфейса netlify), но возвращение данных всегда приводит к 502.

Я пробовал то же самое в почтальоне и ничего не получил обратно тело.

Когда я жестко кодирую body: 'test string', он вернет «тестовую строку» правильно, так что я знаю, что функция работает иначе, поэтому я действительно озадачен тем, почему результаты доступны, когда они зарегистрированы, но не в обратный звонок.

results в журнале представлен массив из 208 довольно простых объектов с примерно 7 свойствами, каждое из которых представляет собой небольшие данные, такие как целочисленные значения и строки url

Любая помощь в этом будет принята.

ОБНОВЛЕННЫЙ КОД ПОСЛЕ ПРИНЯТИЯ ОТВЕТА - также добавлены заголовки CORS, потому что они появились позже

        callback(null, {
          statusCode: 200,
          headers: {
            'Access-Control-Allow-Origin': '*',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify(results)
        })

1 Ответ

1 голос
/ 12 февраля 2020

Попробуйте использовать JSON .stringify для результатов, тело должно быть строкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...