Node.js Лямбда-функция не работает MySQL запрос - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть Node.js лямбда-функция с установленной библиотекой mysql. Когда я запускаю его, он не выполняет функцию query(), он просто пропускает ее. Вот мой код:

const mysql = require('mysql');

const con = mysql.createConnection({
  host     : process.env.RDS_HOSTNAME,
  user     : process.env.RDS_USERNAME,
  password : process.env.RDS_PASSWORD,
  port     : process.env.RDS_PORT
});

exports.handler = async (event) => {
  con.query("UPDATE users SET status=-1 WHERE users.id = ?", [event.params.querystring.id], function (err, result) {
    if (err) throw err;
    return {
      success: true
    };
  });
  return {
    error: true,
    message: "Nothing happened"
  };
};

Когда я запускаю это, я получаю сообщение об ошибке / ничего не произошло, который я настроил. Как мне заставить его выполнить запрос?

1 Ответ

0 голосов
/ 11 апреля 2020

Вы возвращаете оператор:

return {
  success: true
};

НЕ относится к вашей функции handler. Вместо этого она связана с анонимной функцией, которую вы определяете как «обратный вызов» для query. По сути, при вызове con.query вы просите его выполнить запрос, а затем, когда это будет сделано с ним (в любой момент в будущем), вызвать вашу функцию обратного вызова с результатами, возвращенными и проанализированными из запроса. После этого ваша функция просто возвращает «отрицательный» регистр.

Вы можете изменить свой handler на следующее:

exports.handler = (event) => {
  return new Promise((resolve,reject) => {
    con.query("UPDATE users SET status=-1 WHERE users.id = ?", [event.params.querystring.id], function (err, result) {
      if (err) reject(err);
      resolve({
        success: true
      });
    });
  });
};

Обратите внимание, что на вызывающей стороне вы должны сделать одно из следующего:

  1. Ожидание вызова, например, var res = await handler(...)
  2. Использование then и обратного вызова, например handler(...).then(res => {...})

(если Вы хотите более конкретный пример вызывающей стороны, пожалуйста, поделитесь кодом, который также вызывает функцию handler.

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