问题描述
express
和knex
在击败我一点;我无法使用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
使用“男性”作为参数,预期结果将返回“ 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
key
和value
。 / p>
您也可以将URL更改为locahost:3000/actor?gender=male