快递 Knex req.query

Express Knex req.query

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

上显示了一个空对象

使用 'male' 作为参数,预期结果为 return“2”。

你发送 male 作为 a route/path parameter 因为你使用 http://localhost:3000/actor/male.

如果你想以 query-param 的形式访问它,你可以保留你的代码,但你需要将你的 request-url 更改为 http://localhost:3000/actor?gender=male

请注意,如果您想将 gender 定义为 route-parameter,您需要将 route-handler 更改为 app.get("/actor/:gender") 并使用 [=15 访问它=].

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

如果你想使用query params,你必须从URL中删除/male,并添加query paramkeyvalue 在 URL.

下面

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