jemand anders
Erfahrenes Mitglied
Hallo,
in der CRUD-Anwendung werden Artikel in einer MySQL-Datenbank im Zusammenspiel mit Node verwaltet.
Im Moment schmiert die App auf Node ab, wenn ein DB-Fehler auftritt. Wenn man keine Browser-Dev-Konsole offen hat, bekommt man es nicht mit. Checks in der HTML-Anwendung, damit so etwas möglichst nicht passiert, kommen noch.
Es geht mir generell darum, dass man eine detaillierte Fehlermeldung bekommt, wenn ein DB-Fehler auftritt. Wie reicht man die DB-Fehlermeldung an die Anwendung durch?
Es dürfte keine Möglichkeit geben, ein generelles Abschmieren zu verhindern, aber wie kann man es möglichst minimieren? Wie gesagt, die Eingabechecks kommen noch. Vermutlich sollte die Node-App ebenfalls entsprechenden Code enthalten, falls jemand die HTML-Anwendung umgeht. Gibt es irgendwelche Standards, die bereits irgendwo niedergeschrieben sind?
Grüße
PS: mysql Ver 15.1 Distrib 10.5.16-MariaDB, for Linux (x86_64) using EditLine wrapper
Der relevante Code:
in der CRUD-Anwendung werden Artikel in einer MySQL-Datenbank im Zusammenspiel mit Node verwaltet.
Im Moment schmiert die App auf Node ab, wenn ein DB-Fehler auftritt. Wenn man keine Browser-Dev-Konsole offen hat, bekommt man es nicht mit. Checks in der HTML-Anwendung, damit so etwas möglichst nicht passiert, kommen noch.
Es geht mir generell darum, dass man eine detaillierte Fehlermeldung bekommt, wenn ein DB-Fehler auftritt. Wie reicht man die DB-Fehlermeldung an die Anwendung durch?
Es dürfte keine Möglichkeit geben, ein generelles Abschmieren zu verhindern, aber wie kann man es möglichst minimieren? Wie gesagt, die Eingabechecks kommen noch. Vermutlich sollte die Node-App ebenfalls entsprechenden Code enthalten, falls jemand die HTML-Anwendung umgeht. Gibt es irgendwelche Standards, die bereits irgendwo niedergeschrieben sind?
Grüße
PS: mysql Ver 15.1 Distrib 10.5.16-MariaDB, for Linux (x86_64) using EditLine wrapper
Der relevante Code:
Code:
Node-App:
app.post('/api/artikel', (req, res) => {
let data = {
nummer: req.body.nummer
}
let sql = "INSERT INTO artikel SET ?"
conexion.query(sql, data, function(err, result) {
if(err) {
throw err
} else {
Object.assign(data, {
id: result.insertId
})
res.send(data)
}
})
})
JS-Code in HTML-Anwendung:
artikelForm.addEventListener('submit', (e) => {
e.preventDefault()
if(option == 'insert') {
fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
bez: bez.value
})
}).then(response => response.json()).then(data => {
const neuerArtikel = []
neuerArtikel.push(data)
show(neuerArtikel)
}).catch(error => console.log(error));
}
})
---
Fehlermeldung Firefox Dev-Tool:
Uncaught (in promise) TypeError: NetworkError when attempting to fetch resource.
---
Fehlermeldung von MySql:
node_modules/mysql/lib/protocol/Parser.js:437
throw err; // Rethrow non-MySQL errors
^
Error: ER_WARN_DATA_OUT_OF_RANGE: Out of range value for column 'precio' at row 1
… {
code: 'ER_WARN_DATA_OUT_OF_RANGE',
errno: 1264,
sqlMessage: "Out of range value for column 'nummer' at row 1",
sqlState: '22003',
index: 0,
sql: "INSERT INTO artikel SET `nummer` = '111111111111111111111111111111'"
}
Zuletzt bearbeitet: