You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express+PostgreSQL后端:数据校验逻辑应置于何处?

问题:REST API数据校验逻辑的放置选择(Node/Express + PostgreSQL)

我正在用Node/Express搭配PostgreSQL开发REST API,部分插入数据的端点需要往多张表写入数据,因此用存储过程封装了所有SQL操作。以下是存储过程和Express代码示例:

存储过程示例

CREATE OR REPLACE PROCEDURE add_doc(_type VARCHAR, _level SMALLINT, _items TEXT[], _verfied BOOLEAN[]) AS $$
DECLARE
    …
BEGIN

    INSERT INTO docs (...) VALUES (...) RETURNING id INTO new_doc_id;

    FOR i IN 1..ARRAY_LENGTH(_items, 1) LOOP
        INSERT INTO doc_items (...) VALUES (...);
    END LOOP;

END $$ LANGUAGE plpgsql;

Express代码示例

router.post('/', (req, res, next) => {

    const query = {
        text: 'CALL add_doc($1::VARCHAR, $2::SMALLINT, $3::TEXT[], $4::BOOLEAN[])',
        values: [req.body.type, req.body.level, req.body.items, req.body.verified]
    }

    Postgres.getPool().query(query, (error, result) => {
        if (error) {
            console.log(error);
            return res.status(500).send(error.message);
        }
            return res.status(200).send(result.rows[0]);
    });

});

当前默认传入API的数据是有效的,现在需要添加数据完整性校验,比如确保_verified数组至少包含一个TRUE值、_items与_verified长度相同等约束。我纠结于将这些校验逻辑放在存储过程/函数还是Express代码中,自己梳理的优缺点如下:

放在存储过程/函数中

  • 优点:校验逻辑离数据源最近,即使绕过API直接调用存储过程也会触发校验;Express代码更轻量化
  • 缺点:用PL/pgSQL编写校验不够便捷,例如统计数组中特定值的出现次数较繁琐

放在Express代码中

  • 优点:用JavaScript编写校验代码量更少,更易编写和维护
  • 缺点:仅能保证通过API操作数据时的校验,无法覆盖其他数据操作场景(如直接操作数据库的情况)

我肯定还遗漏了部分考量因素,同时也不清楚两种方案在性能上的优劣,希望得到解答。

内容的提问来源于stack exchange,提问作者Christian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 20:33:09