Лямбда-функция MySQL, результат не работает на NodeJs 8.10 - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть код в Node 6.10, и он работает ... Но если я преобразую его в Node 8.10, он не будет работать

var mysql = require("mysql");
var connection = mysql.createConnection({
  host: " localhost",
  user: "root",
  password: "",
  database: "parser_db"
});

exports.handler = async event => {
  connection.connect();

  let response = {
    statusCode: 400,
    body: { Method: "Invalid", event }
  };

  var readTable = "SELECT * FROM documents where id = " + mysql.escape(1);
  connection.query(readTable, function(err, results, fields) {
    if (err) throw err;
    else {
      response = {
        statusCode: 200,
        body: { results }
        //body: { results }
      };
      console.log(response);
      return response;
    }
  });
};

Может кто-нибудь, пожалуйста, помогите мне обнаружить проблему. Это также не работает, если я делаю запрос MySQL в отдельном файле и возвращаю набор результатов.

Примечание: если я распечатаю результат, используя console.log (response), вместо этого возвращая показывает правильный результат.

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

В дополнение к ответу @ jarmod, вы также можете использовать метод util.promisify , чтобы обещать connection.query, чтобы вы могли использовать ключевое слово await, чтобы сделать код проще

const util = require('util');
exports.handler = async (event) => {
  connection.connect();
  const readTable = `SELECT * FROM documents where id = ${mysql.escape(1)}`;
  const connQueryPromisified = util.promisify(connection.query).bind(connection);
  const result = await connQueryPromisified(readTable);
  return {statusCode: 200, body: {results}};
};
0 голосов
/ 09 сентября 2018

Проблема в том, что вы возвращаете ответ из функции обратного вызова connection.query (). Это делает ответ возвращаемым значением для функции обратного вызова, а не возвращаемым значением для внешней лямбда-функции.

Один из способов реструктуризации этого кода заключается в следующем:

exports.handler = async (event) => {
  connection.connect();
  return new Promise((resolve, reject) => {
    const readTable = `SELECT * FROM documents where id = ${mysql.escape(1)}`;
    connection.query(readTable, (err, results, fields) => {
      if (err) {
        reject(err);
      } else {
        resolve({statusCode: 200, body: {results}});
      }
    });
  });
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...