то есть роут выглядит так
router.post("/track/create",
passport.auntificate("jwt", {session: false}), multer.single("track", {maxCount: 1}), trackController.createTrack)
но прикол в том, что мне же сначала создать трек, чтобы правильно создать путь в которой будет храниться трек включив в путь айди трека в базе данных, ну то есть
path.resolve(__dirname, "static", " tracks", track_id, track.mp3)
Но я не могу включить в путь айди трека потому что у меня миддлвар multer стоит до контроллера, как быть, если в контроллере и происходит создание трека?
у меня был вариант ещë поставить миддлвар в конце роута, но получается я должен в контроллере писать next(), а затем стразу отправлять статус код 200, а что если сохранение трека будет неудачным? А ответ на клиент уже отправлен
помогите плиз,
https://github.com/expressjs/multer#diskstorage
помогите🥺
звучит как костыль, переименовывать
тебе однозначно надо будет работать с файлом, удалить или переместить из /tmp
а если б прочитал доку, то увидел бы там это памяти, конечно, скушает больше при загрузке файла, но ты можешь выбрать что делать с файлом после его полной загрузки
файл в озу будет? Его потом можно удалить?
такое себе решение думаю
А зачем тебе путь, в котором будет id?
потому что в этой папке ещë будет и картинка трека, то есть пути будут path.resolve(__dirname, "static", "tracks", "img") path.resolve(__dirname, "static", "tracks", "audio")
Как вариант, имя файла может быть любой другой рандомной строкой. А название трека, id и путь к файлу у тебя будет хранится в бд
использовать uuid
типа в бд у Track сущности сделать поле imgPath: "/744yuwudyc2i1j/img/u4hsuc6wi2i.jpg" так?
так да?
Да. Тогда у тебя не будет проблемы шаринга id между сущностью в бд и навзанием файла
ну там проблема будет энивей, я просто забыл какая проблема, но она там есть, при отправке 2 файлов
ну в общем из за того что destination срабатывает 2 раза, потому что я передаю 2 файла: mp3 и jpg, не получится передать одинаковый v4 дальше в контроллер. Я капсом напишу, где путь на будет совпадать path.resolve(__dirname, "static", "tracks", "FKD43-FDJKJLFDL-439FDJ, audio") path.resolve(__dirname, "static", "tracks", "FKD43-FDJKJLFDL-439FDJ, img") То есть "FKD43-FDJKJLFDL-439FD" будет не одинаковым
замыкание попробую вписать как то, не уверен что это вообще получится, но всё же
я придумал, может между passport и uploadTrack создать новый middleware, который будет генерировать общий v4 и передовать дальше? Вообще это будет, работать, вопрос только в том костыль ли это?
как думаете парни, это норм?
костыль или нормально?
Обсуждают сегодня