Я строю приложение Next.js, которое повторяет функциональность, аналогичную Google Drive. Пользователи могут создавать вложенные папки под /приборной панели /рабочая комната, используя всеобщее динамическое маршрут ([... foterid]). URL каждой папки структурирован как пара идентификатора папки и имя папки. Например, когда я создаю папку с именем «Данные» с идентификатором 1, URL становится: < /p>
/dashboard/work-room/1/data
< /code>
В моем приложении идентификатор папки используется для вызовов API и извлечения данных, в то время как имя папки используется на дисплее Breadcrumb. Все работает правильно, когда приложение генерируется URL. Однако, если пользователь вручную изменяет имя папки в URL (или добавляет дополнительные сегменты), API по -прежнему получает данные, основанные исключительно на идентификаторе папки. Например:
Навигация по/приборной панели/рабочая комната/1/случайный по-прежнему получает данные для идентификатора папки 1, даже если имя сейчас "Случайный". ID 2. : < /p>
// Extract dynamic segments from the URL
const pathname = usePathname();
const dynamicPath = pathname
.replace("/dashboard/work-room", "")
.split("/")
.filter(Boolean);
// Folder id is assumed to be the second-to-last segment
const id =
dynamicPath.length >= 2 ? dynamicPath[dynamicPath.length - 2] : null;
const handleOpenFolder = (id, name) => {
router.push(
`/dashboard/work-room/${[
...dynamicPath,
id,
encodeURIComponent(name),
].join("/")}`
);
};
< /code>
и для получения данных (при генерации паров папок): < /p>
const pathname = usePathname();
const dynamicPath = pathname
.replace("/dashboard/work-room", "")
.split("/")
.filter(Boolean);
const id =
dynamicPath.length >= 2 ? dynamicPath[dynamicPath.length - 2] : null;
// Generate folder pairs (id, name)
const folders = [];
for (let i = 0; i < dynamicPath.length; i += 2) {
const id = dynamicPath;
const name = dynamicPath[i + 1];
if (id && name) {
folders.push({ id, name });
}
}
< /code>
Даже если имя папки в URL манипулируется или неверно, компонент всегда приносит данные на основе идентификатора папки. Это приводит к несоответствиям между отображаемой хлебной рубкой и фактическими данными папок. Более того, с глубоко вложенными маршрутами, если кто-то посещает URL-адрес, например, приборная панель/рабочая комната/1/неправомерные кончики/2/данные, компонент рендерирует с использованием идентификатора папки 2 без подтверждения того, что имя папки для идентификатора 1.
Мой вопрос: < /strong>
Как я могу проверить полную вложенную цепочку папок, чтобы, если пользователь вручную изменяет имя папки или добавляет дополнительные сегменты. Мне нужен надежный подход, который работает с любым уровнем гнездования. Скажите мне, что он будет обращаться на Frontend или от Backend.>
Подробнее здесь: https://stackoverflow.com/questions/794 ... url-may-be
Как я могу применять допустимые вложенные маршруты папок, когда имена папок в URL могут быть изменены вручную? ⇐ Javascript
Форум по Javascript
1739426748
Anonymous
Я строю приложение Next.js, которое повторяет функциональность, аналогичную Google Drive. Пользователи могут создавать вложенные папки под /приборной панели /рабочая комната, используя всеобщее динамическое маршрут ([... foterid]). URL каждой папки структурирован как пара идентификатора папки и имя папки. Например, когда я создаю папку с именем «Данные» с идентификатором 1, URL становится: < /p>
/dashboard/work-room/1/data
< /code>
В моем приложении идентификатор папки используется для вызовов API и извлечения данных, в то время как имя папки используется на дисплее Breadcrumb. Все работает правильно, когда приложение генерируется URL. Однако, если пользователь вручную изменяет имя папки в URL (или добавляет дополнительные сегменты), API по -прежнему получает данные, основанные исключительно на идентификаторе папки. Например:
Навигация по/приборной панели/рабочая комната/1/случайный по-прежнему получает данные для идентификатора папки 1, даже если имя сейчас "Случайный". ID 2. : < /p>
// Extract dynamic segments from the URL
const pathname = usePathname();
const dynamicPath = pathname
.replace("/dashboard/work-room", "")
.split("/")
.filter(Boolean);
// Folder id is assumed to be the second-to-last segment
const id =
dynamicPath.length >= 2 ? dynamicPath[dynamicPath.length - 2] : null;
const handleOpenFolder = (id, name) => {
router.push(
`/dashboard/work-room/${[
...dynamicPath,
id,
encodeURIComponent(name),
].join("/")}`
);
};
< /code>
и для получения данных (при генерации паров папок): < /p>
const pathname = usePathname();
const dynamicPath = pathname
.replace("/dashboard/work-room", "")
.split("/")
.filter(Boolean);
const id =
dynamicPath.length >= 2 ? dynamicPath[dynamicPath.length - 2] : null;
// Generate folder pairs (id, name)
const folders = [];
for (let i = 0; i < dynamicPath.length; i += 2) {
const id = dynamicPath[i];
const name = dynamicPath[i + 1];
if (id && name) {
folders.push({ id, name });
}
}
< /code>
Даже если имя папки в URL манипулируется или неверно, компонент всегда приносит данные на основе идентификатора папки. Это приводит к несоответствиям между отображаемой хлебной рубкой и фактическими данными папок. Более того, с глубоко вложенными маршрутами, если кто-то посещает URL-адрес, например, приборная панель/рабочая комната/1/неправомерные кончики/2/данные, компонент рендерирует с использованием идентификатора папки 2 без подтверждения того, что имя папки для идентификатора 1.
Мой вопрос: < /strong>
Как я могу проверить полную вложенную цепочку папок, чтобы, если пользователь вручную изменяет имя папки или добавляет дополнительные сегменты. Мне нужен надежный подход, который работает с любым уровнем гнездования. Скажите мне, что он будет обращаться на Frontend или от Backend.>
Подробнее здесь: [url]https://stackoverflow.com/questions/79435188/how-can-i-enforce-valid-nested-folder-routes-when-folder-names-in-the-url-may-be[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия