如何解决如何区分两个具有相同参数的获得路线?
我有两条路线。
app.get('/api/v1/bucket/:bucket_name',(req,res) => {
queries.getAllFilesFromSpecificBucket(req.params.bucket_name).then(data => {
res.json(data);
});
})
app.get('/api/v1/bucket/:file_name',res) => {
queries.getSpecificFileByName(req.params.file_name).then(data => {
res.json(data);
});
})
除参数名称外,两个路径均相同api / v1 / bucket /。这里的问题是,当我尝试使用file_name参数获取路由时,总是使用bucket_name参数调用第一条路由。 请帮忙
解决方法
简单的答案是只更改您的api路由之一。另一种选择是合并路线并使用查询参数
app.get('/api/v1/bucket/:name',(req,res) => {
if (req.query.bucket === "true") {
//DO bucket logic
} else {
// DO file logic
}
})
要使其正常工作,您需要将前端路由更新为类似的内容
const getBucket = `/api/v1/bucket/${bucketName}?bucket=true`
const getFile = `/api/v1/bucket/${fileName}?bucket=false` // NOTE you can just remove the ?bucket=false from this line
,
如果您的存储桶名称中没有.
,并且文件名始终带有扩展名,则此方法可能会起作用
app.get('/api/v1/bucket/:name',res) => {
const name = req.params.name;
if (name.includes(".")) {
queries.getSpecificFileByName(name).then(data => {
res.json(data);
});
} else {
queries.getAllFilesFromSpecificBucket(name).then(data => {
res.json(data);
});
}
})
此代码将执行的操作是检查:name
是否具有.
,如果具有,则将按文件名获取文件,如果没有,则将获取存储桶中的所有文件名称
例如:
-
example.jpg
->文件 -
.example
->文件 -
example
->存储桶
但是,如果您想使其更加 REST ,那么我认为更改路由路径更有意义,例如:
-
/api/v1/buckets/:bucketName/files
:将所有文件存储在存储桶中 -
/api/v1/buckets/:bucketName/files/:fileName
:通过存储桶中的文件名获取文件 -
/api/v1/files/:fileName
:在任何存储桶中按文件名获取文件
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。