Express Knex req.query 快递: Knex申请

问题描述

expressknex在击败我一点;我无法使用req.querys(来自express的响应)使该端点正常工作,即使我使用req.params创建了一个端点也没关系。


快递:

app.get(`/actor`,async (req: Request,res: Response) => {
    try {
        // const { gender } = req.query;
        const count = await getActorsByGender(req.query.gender as string);

        console.log({ count });
        res.status(200).send({ quantity: count,});
    } catch (error) {
        res.status(200).send({ message: error.sqlMessage || error.message });
    }
});

Knex申请

const getActorsByGender = async (gender: string): Promise<any> => {
    try {
        const result = await connection.raw(`
            SELECT COUNT(*) as count FROM Actor
            WHERE gender = "${gender}"
        `);

        // console.log(`Temos: ${result[0][0].count} ocorrências`);
        return result;
    } catch (error) {
        console.log(error);
    }
};

这可能是由于count()引起的,但是我不确定。 knex部分正常;我可以console.log()的结果。 express部分在insomnia

显示一个空对象

Insomnia Page

使用“男性”作为参数,预期结果将返回“ 2”。

解决方法

由于您使用male,因此您以a route/path parameter的身份发送http://localhost:3000/actor/male

如果您想以查询参数的形式访问它,则可以保留您的代码,但是您需要将请求网址更改为http://localhost:3000/actor?gender=male

请注意,如果您想将gender定义为路由参数,则需要将路由处理程序更改为app.get("/actor/:gender"),然后使用req.params.gender进行访问。

,

您正在path param中使用insomnia,而不是query param

如果要使用query params,则必须从URL中删除/male,并在URL下方添加query param keyvalue。 / p>

您也可以将URL更改为locahost:3000/actor?gender=male