Далее. js MySQL Запрос INSERT / UPDATE никогда не выполняется - PullRequest
0 голосов
/ 12 июля 2020

Довольно странная проблема здесь ... Я думаю, что это может быть больше проблема отладки, однако я собираюсь опубликовать сообщение на случай, если это действительно проблема, и я, честно говоря, в любом случае в своем уме. Я делаю форму basi c React.js / next. js, которая принимает несколько входных данных и добавляет их в состояние, а затем с помощью ax ios отправляет обновление в api, который затем выполняет вставку или обновление запроса на MySQL. Проблема в том, что эта вставка / обновление не работает, и я не могу время от времени получать никаких сообщений об ошибках, кроме generi c ETIMEDOUT, которые, я даже не уверен, связаны. Я исправлял это раньше, но до сих пор не уверен, что сделал. ВСЕ другие запросы на сайте работают нормально, подключение к базе данных MySQL (AWS RDS) в порядке.

Мои теории: A) синтаксис окончательного запроса имеет глупая проблема, из-за которой он просто теряется в бездне, или B) есть некоторый код на стороне сервера, который пытается запустить на стороне клиента, что я не совсем понимаю. (также получили модуль 'fs' not found) или C) асинхронная c проблема, которую я недостаточно выветриваю в следующем. js, чтобы исправить. И прежде чем вы это скажете, да, в таблице есть данные, которые нужно обновить, он не пытается обновить те же данные и, таким образом, не выполняет обновление. Каждый раз, когда я тестирую, это новые данные.

ПРИМЕЧАНИЕ. Я также должен сказать, что этот код ИДЕАЛЬНО работает в моей локальной среде osx. Это происходит ТОЛЬКО, когда я пытаюсь запустить это в своей среде развертывания Vercel. Это важно знать. База данных и код ТОЧНО одинаковы для обеих сред.

Без лишних слов, код:

Чтобы сохранить отображение кода, предположим, что наши значения находятся в состоянии и готовы к go в API, насколько я знаю точно, и они соответствуют фактическому запросу.

handleSubmit - запускается при отправке формы.

const handleSubmit = (e) => {
        e.preventDefault();

        // Loop data, create a list of IDs for the Delete and an 
        // array of array of arrays for the insert.
        let segmentItemIDList = [];
        const segmentItemArray = [];

        originalSegmentItemList = originalSegmentItemList.join(',')

        segmentItemState.map((val, idx) => (
            segmentItemArray[idx] = [
                segmentItemState[idx].segmentID,
                Number(segmentItemState[idx].chronologicalOrder),
                Number(segmentItemState[idx].releaseOrder),
                segmentItemState[idx].name,
                segmentItemState[idx].typeID
            ]
        ))

        let action = 'updatesegmentitem'
        axios.post('/api/list', { action, segmentItemArray })
          .then((result) => {

            action = 'deletesegmentitem'
            axios.post('/api/list', { action, originalSegmentItemList })
            .then((result) => {
                alert("Updated!!");
            })
            .catch(error => console.error('Error:', error));

          })
          .catch(error => console.error('Error:', error));
      }

api / list (предположим, что он попадает в этот блок, потому что он попадает)

else if(req.body.action == 'updatesegmentitem') {
            console.log("2. API updatesegmentitem req.body: ", req.body);

            const segmentItemArray = req.body.segmentItemArray;

            console.log("SegmentItemArray: ", segmentItemArray);

            try {
                if(Array.isArray(segmentItemArray) && segmentItemArray.length > 0) {
                    console.log("Inside IsArray: ", segmentItemArray);
                    const segmentItemInsertResults = await insertBatchSegmentItems(segmentItemArray);
                    res.send(segmentItemInsertResults);
                } else {
                    res.send(true);
                }
            } catch (e) {
                res.send('error');
            }

insertBatchSegmentItems (mysql запрос) .. Иногда я получаю здесь журналы консоли, иногда нет ..

export async function insertBatchSegmentItems(segmentItemData) {
  let mysqlConnection = mysql.createConnection({
      host: process.env.MYSQL_HOST,
      database: process.env.MYSQL_DATABASE,
      user: process.env.MYSQL_USER,
      password: process.env.MYSQL_PASSWORD,
      debug: false,
  });

  mysqlConnection.connect();

  const insertSQL = 'INSERT INTO segmentItem (segmentID, chronologicalOrder, releaseOrder, name, typeID) VALUES ?'

  try {
    await mysqlConnection.query(insertSQL, [segmentItemData], function(err, result) {
      console.log("Connex Query Inside Result: ", result);
      if (err) throw err;
      //mysqlConnection.destroy();
      return result;
    });
  } catch (e) {
    console.log("ERROR: ", e);
    //mysqlConnection.destroy();
    return e;
  }

  return true;
}

Пожалуйста, извините за беспорядок, я пробовал столько разных вещей, чтобы заставить это работать, но это будет очищено после решение найдено.

1 Ответ

0 голосов
/ 12 июля 2020

Всякий раз, когда я сталкиваюсь с подобными ситуациями, я обычно бросаю обработку исключений и позволяю ей терпеть неудачу. Это может дать вам лучшее представление о том, где это происходит. Удачи!

...