#node.js #express
#node.js #выразить
Вопрос:
У меня есть два маршрута.
app.&et('/api/v1/bucket/:bucket_name', (req, res) =&&t; {
queries.&etAllFilesFromSpecificBucket(req.params.bucket_name).then(data =&&t; {
res.json(data);
});
})
app.&et('/api/v1/bucket/:file_name', (req, res) =&&t; {
queries.&etSpecificFileByName(req.params.file_name).then(data =&&t; {
res.json(data);
});
})
Путь к двум из них один и тот же api /v1 / bucket /, за исключением имени параметра.Здесь моя проблема в том, что когда я пытаюсь получить маршрут с параметром file_name, всегда вызывается первый маршрут с параметром bucket_name.
Пожалуйста, помогите
Ответ №1:
Простой ответ — просто изменить один из ваших маршрутов api. Другой вариант — объединить маршруты и использовать параметр запроса
app.&et('/api/v1/bucket/:name', (req, res) =&&t; {
if (req.query.bucket === "true") {
//DO bucket lo&ic
} else {
// DO file lo&ic
}
})
Чтобы это сработало, вам нужно обновить свой интерфейсный маршрут примерно так
const &etBucket = `/api/v1/bucket/${bucketName}?bucket=true`
const &etFile = `/api/v1/bucket/${fileName}?bucket=false` // NOTE you can just remove the ?bucket=false from this line
Ответ №2:
Это может сработать, если в вашем bucketname нет .
, а имя файла всегда имеет расширение
app.&et('/api/v1/bucket/:name', (req, res) =&&t; {
const name = req.params.name;
if (name.includes(".")) {
queries.&etSpecificFileByName(name).then(data =&&t; {
res.json(data);
});
} else {
queries.&etAllFilesFromSpecificBucket(name).then(data =&&t; {
res.json(data);
});
}
})
Что будет делать этот код, так это проверяет, :name
есть .
или нет, если есть, то он получит файл по имени файла, если нет, то он получит все файлы внутри имени корзины
Например:
example.jp&
-&&t; файл.example
-&&t; файлexample
-&&t; корзина
Но если вы хотите сделать его более REST, то я думаю, что имеет смысл изменить ваш маршрут, например:
/api/v1/buckets/:bucketName/files
: получить все файлы внутри корзины/api/v1/buckets/:bucketName/files/:fileName
: получение файла по имени файла внутри корзины/api/v1/files/:fileName
: получение файла по имени файла в любом сегменте