Я пытаюсь сохранить загрузку изображений на моем сервере через атрибут имени файла, который мне предоставляет промежуточное программное обеспечение Multer. Встречаясь с очень странной ошибкой.
Следуя примеру моего инструктора, я сначала сохранил имя файла, используя синтаксис file.filename + '-' + file.original name. Кажется, работает правильно; я еще не запустил бэкэнд, поэтому я перенаправлен на страницу с кодом 500 статуса. Изображение также будет сохранено в целевой папке 'images' на моем сервере nodejs.
const fileStorage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, 'images');
},
filename: (req, file, cb) => {
cb(null, file.filename + '-' + file.originalname);
}
});
Вот соответствующее промежуточное ПО для multer:
app.use(multer({storage: fileStorage }).single('image'));
Далее я подправляю метод fileStroage и попробуйте его сохранить в дате со стилем скриншота, используя новый метод Date (). toISOString ().
const fileStorage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, 'images');
},
filename: (req, file, cb) => {
cb(null, new Date().toISOString() + '-' + file.originalname);
}
});
Но вместо того, чтобы перенаправлять обратно на страницу ошибок бэкенда, я получаю эту ошибку с моим приложением.
TypeError: Cannot read property 'isLoggedIn' of undefined
at C:\Users\Bhowal Soham\Desktop\NODE_Project\app.js:117:34
at Layer.handle_error (C:\Users\Bhowal Soham\Desktop\NODE_Project\node_modules\express\lib\router\layer.js:71:5)
at trim_prefix (C:\Users\Bhowal Soham\Desktop\NODE_Project\node_modules\express\lib\router\index.js:315:13)
at C:\Users\Bhowal Soham\Desktop\NODE_Project\node_modules\express\lib\router\index.js:284:7
at Function.process_params (C:\Users\Bhowal Soham\Desktop\NODE_Project\node_modules\express\lib\router\index.js:335:12)
at next (C:\Users\Bhowal Soham\Desktop\NODE_Project\node_modules\express\lib\router\index.js:275:10) at Layer.handle_error (C:\Users\Bhowal Soham\Desktop\NODE_Project\node_modules\express\lib\router\layer.js:67:12)
at trim_prefix (C:\Users\Bhowal Soham\Desktop\NODE_Project\node_modules\express\lib\router\index.js:315:13)
at C:\Users\Bhowal Soham\Desktop\NODE_Project\node_modules\express\lib\router\index.js:284:7
at Function.process_params (C:\Users\Bhowal Soham\Desktop\NODE_Project\node_modules\express\lib\router\index.js:335:12)
at next (C:\Users\Bhowal Soham\Desktop\NODE_Project\node_modules\express\lib\router\index.js:275:10) at Layer.handle_error (C:\Users\Bhowal Soham\Desktop\NODE_Project\node_modules\express\lib\router\layer.js:67:12)
at trim_prefix (C:\Users\Bhowal Soham\Desktop\NODE_Project\node_modules\express\lib\router\index.js:315:13)
at C:\Users\Bhowal Soham\Desktop\NODE_Project\node_modules\express\lib\router\index.js:284:7
at Function.process_params (C:\Users\Bhowal Soham\Desktop\NODE_Project\node_modules\express\lib\router\index.js:335:12)
at next (C:\Users\Bhowal Soham\Desktop\NODE_Project\node_modules\express\lib\router\index.js:275:10)
isLoggedIn относится к одному из параметров, которые я пытаюсь установить локально с res.locals для каждого из моих входящих запросов. Хронологически. это одно из первых промежуточных программ, которые запускаются в моем приложении.
app.use((req, res, next) => {
res.locals.isAuthenticated = req.session.isLoggedIn;
console.log(req.session.isLoggedIn);
res.locals.csrfToken = req.csrfToken();
if (!req.session.user) {
return next();
}
res.locals.username = req.session.user.name;
next();
});
Изначально я догадался, что ошибка связана с параметрами fileFilter, которые я позже попытался добавить к своему промежуточному программному обеспечению. Теперь приложение работает нормально (без метода Date), но действительно странно, что я получаю такую странную ошибку с методом Date (). ToISOString (). Я имею в виду, что запрос пропускает одно из моих универсальных промежуточных программ, это должно быть одна из самых странных ошибок, которые я пытался отладить. О, и не говоря уже о том, что у моего инструктора не было таких ошибок, когда он пробовал метод даты в своем видео.
Есть идеи, что может пойти не так? Могу ли я пропустить сторонний пакет или что-то? Потому что было бы очень удобно получить опцию хранения по дате для моих загрузок.