从 Knex 获取行数

Getting count of rows from Knex

我有一个异步函数正在尝试 return table“帖子”

中的行数
async getPostCount() {
    return db('posts').count('id');
}

这用于 API...

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

但是,我遇到了一个错误,并且无法在互联网上找到任何相关信息。

Something went wrong. error: select * from "posts" where "id" =  limit  - invalid input syntax for type integer: "count"

可能发生了什么?

knex.js 查询生成器的结果是数组。 查询可能会成功并且只是 return 0 个结果。

此外,您可以尝试直接在列名(或 count() 调用)中使用列的别名。像这样的东西:

async getPostCount() {
    return db('posts').count('id as CNT').first()
}

.....

 await PostsService.getPostCount()
                    .then(result => {
                        res.json({
                            count: result.CNT,
                            token: req.query.secret_token
                        })
                    })