我正在尝试制作基于expressJS的简单应用程序来返回用户(如API)。 我有 /users 路由来获取所有用户,这是可以的。
app.get('/users', (req: express.Request, res: express.Response)
我需要添加一个可选参数限制以不输出所有记录。例如:
app.get('/users?limit=5', (req: express.Request, res: express.Response)
但 limit 参数应该是 可选,因此像 /users 或 /users?limit=5 或 /users/limit/5 这样的 URL 将起作用。
谢谢你。
完全不要修改路线名称。
app.get('/users',
将匹配 /users
(带或不带查询字符串)。
req.query
访问查询字符串中的数据。
if (typeof req.query.limit !== 'undefined') {
// a limit has been requested
}
我认为您需要创建两个端点。
'/users'
和 '/users?limit=5'
的第一个端点
app.get('/users', (req: express.Request, res: express.Response) => {
const { limit } = req.query
console.log(limit)
})
'/users/limit/5'
的第二个端点
app.get('/users/limit/:limit', (req: express.Request, res: express.Response) => {
const { limit } = req.params
console.log(limit)
})
使用
app.get('/users?limit=5', (req: express.Request, res: express.Response)
作为路线是一个好方法;调用时可以提供参数,也可以不提供。
(我不知道如何在express/node中做到这一点,但我用php laravel引用它来向你展示逻辑)
因此,在控制器中设置条件来执行所选的查询;您将准备好的查询存储在变量中:
$query = Model::myqueryBuilder();
所以设置条件就像
if($request->limit) {
$query = $query->limit($request->limit);
}
如果你还有其他参数,你可以制定另一个条件;在我们所有参数条件的最后执行查询
$query->get();
因此您可以有条件地使用某些查询生成器并执行最后准备的所有查询。
希望这个逻辑对你有帮助