【发布时间】:2017-10-01 22:07:41
【问题描述】:
我正在尝试使用存储过程来创建角色。在将参数插入数据库之前,该过程会进行一些验证以确保参数有效(让我们在数据库中保留此验证)。但是,当我尝试在带有无效数据的 Web 界面中使用该过程时,没有结果集,并且不会发生错误承诺。我该怎么做才能使此过程在节点端引起错误?
-- 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;
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');
});
})
返回的行对象。
{ command: '', rowCount: NaN, rows: [], fields: null }
【问题讨论】:
-
你明白了吗?.. err 是空的?然后行?..
-
@VaoTsun 我将添加返回的行对象的副本。
-
@HSchmale 不要使用
SELECT func_name,使用SELECT * FROM func_name;) -
@vitaly-t 仍然有同样的问题,没有返回结果集。
-
顺便说一句,@vitaly-t brianc 的 pg 与
SELECT func_name(1,2,3)配合得很好 - 不确定你的 pg-promise?
标签: postgresql express stored-procedures promise node-postgres