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

使用Knex查询posts表行数时报integer类型输入无效错误如何解决

问题原因

该报错和你写的getPostCount统计逻辑无关,是Express路由匹配顺序错误导致的:
你在当前/count路由的定义之前,大概率写了一个同层级带动态参数的路由,例如router.get('/:id', 业务逻辑)。Express会按照路由定义的先后顺序做路径匹配,当你请求/count时,会优先命中前面的/:id路由,将字符串count当做id参数的值传入后续逻辑,程序尝试用字符串count查询整数类型的id字段,就触发了类型转换错误。你看到的报错SQL是查询单条post的语句,而非count统计语句,也验证了请求根本没有走到你写的/count路由逻辑中。

解决方案
  • 调整路由定义顺序:将路径固定的精确匹配路由(比如本次的/count),放到所有同层级带动态参数的路由(比如/:id)前面,保证请求能匹配到正确的路由。
  • 可以顺带优化冗余代码:你当前混写了async/await和.then/.catch,写法冗余,同时Knex的count方法默认返回数组格式的结果,也可以优化成直接返回统计值:

优化后的统计函数:

async getPostCount() {
    // 给统计结果起别名,用first直接取第一条数据的统计值
    const result = await db('posts').count('id as count').first();
    return result.count;
}

优化后的路由逻辑:

router.get(
    '/count',
    async (req, res, next) => {
        try {
            const count = await PostsService.getPostCount();
            res.json({
                count: count,
                token: req.query.secret_token
            })
        } catch (err) {
            console.log(err);
            res
                .status(500)
                .json({ success: false, msg: `Something went wrong. ${err}` });
        }
    }
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:36:03