Довольно странная проблема здесь ... Я думаю, что это может быть больше проблема отладки, однако я собираюсь опубликовать сообщение на случай, если это действительно проблема, и я, честно говоря, в любом случае в своем уме. Я делаю форму 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;
}
Пожалуйста, извините за беспорядок, я пробовал столько разных вещей, чтобы заставить это работать, но это будет очищено после решение найдено.