Ich versuche eine gespeicherte Prozedur zu verwenden, um ein Zeichen zu erstellen. Die Prozedur führt eine Überprüfung durch, um sicherzustellen, dass die Parameter gültig sind, bevor sie in die Datenbank eingefügt werden (lassen Sie uns diese Validierung in der Datenbank behalten). Wenn ich jedoch versuche, die Prozedur in meiner Webschnittstelle mit ungültigen Daten zu verwenden, gibt es kein Ergebnis, und die Fehlerversprechung tritt nicht auf. Was muss ich tun, damit diese Prozedur einen Fehler auf der Knotenseite verursacht?node-postgres zeigt keine Ergebnismenge für gespeicherte Prozedur an
-- add a character with the universe performing the universe name lookup
CREATE OR REPLACE FUNCTION add_character(
IN p_chr_name VARCHAR(255),
IN p_unv_name VARCHAR(255),
IN p_chr_bio TEXT
)
RETURNS INT AS $$
DECLARE
unv_id INTEGER := (SELECT unv_id
FROM universes
WHERE LOWER(unv_name) = LOWER(p_unv_name));
new_id INTEGER := NULL;
BEGIN
IF unv_id IS NULL THEN
RAISE EXCEPTION 'unv_id is null for %', p_unv_name;
END IF;
INSERT INTO characters(chr_name, chr_unv_id, chr_bio) VALUES
(p_chr_name, unv_id, p_chr_bio)
RETURNING chr_id INTO new_id;
RETURN new_id;
END $$
LANGUAGE PLPGSQL;
Die JavaScript
app.post('/contrib/chr', (req, res) => {
console.log(req.body);
pool.query('SELECT add_character($1, $2, $3)'
[req.body.chr_name, req.body.unv_name, req.body.chr_bio])
.then((rows) => {
console.log(rows);
res.render('contrib');
}).catch((err) => {
console.error('contrib-chr-err', err);
res.render('contrib');
});
})
Das Zeilenobjekt zurückgegeben.
{ command: '', rowCount: NaN, rows: [], fields: null }
und erhalten Sie .. err ist leer? dann Zeilen? .. –
@VaoTsun Ich werde eine Kopie des Zeilenobjekts hinzufügen, das zurückgegeben wird. – HSchmale
@HSchmale nicht 'SELECT func_name' verwenden,' SELECT * FROM func_name';) –