这里的问题很奇怪。我认为这可能更多是调试问题,但是如果发生确实是一个问题,我将予以发布,无论如何我还是很坦率地说。我正在做一个基本的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;
}
请原谅我的混乱,我一直在尝试许多不同的方法来尝试使它正常工作,但是在找到解决方案后将对其进行清理。
答案 0 :(得分:0)
每当遇到类似情况时,我通常都会放弃异常处理,并使其异常失败。它可以让您更好地了解发生的地方。祝你好运!