Next.js MySQL INSERT / UPDATE查询似乎从未执行

时间:2020-07-12 13:54:45

标签: mysql sql reactjs next.js

这里的问题很奇怪。我认为这可能更多是调试问题,但是如果发生确实是一个问题,我将予以发布,无论如何我还是很坦率地说。我正在做一个基本的React.js / next.js表单,该表单接受一些输入并将其添加到状态,然后使用axios将更新发送到api,然后将查询插入或更新到MySQL。问题是,此插入/更新无法正常工作,除了通用ETIMEDOUT之外,我无法获得任何错误输出,我什至不确定是否相关。我之前已解决此问题,但仍不确定我做了什么。 所有该站点上的其他查询都可以正常工作,与MySQL(AWS RDS)数据库的连接也很好。

我的理论是:A)最终查询语法有一个愚蠢的问题,导致它迷失在深渊中,或者B)有一些服务器端代码试图在客户端运行,我不太了解。 (也找到了模块“ fs”),或C)一个异步问题,我在next.js中没有足够的时间来解决。在您说出来之前,是的,表中有要更新的数据,它不是在尝试更新相同的数据,因此会绕过更新。每次测试时都是新数据。

注意-我也应该说,此代码在我的本地osx环境中可以正常运行。仅当我尝试在Vercel部署环境上运行它时,才会发生这种情况。这一点很重要。两种环境之间的数据库和代码完全相同。

事不宜迟,一些代码:

要保存代码显示,请假设我们的值处于状态并准备好使用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 :(得分:0)

每当遇到类似情况时,我通常都会放弃异常处理,并使其异常失败。它可以让您更好地了解发生的地方。祝你好运!