Я создал form
, который позволяет зарегистрированным пользователям загружать информацию о событиях в мое веб-приложение.Текст из формы превращается в объект JSON
, а оттуда изменяется в существующий файл JSON и загружается в Amazon-S3
.Кроме того, пользователь может загрузить изображение с событием, которое загружается отдельно в S3 в подпапке / imgs (в том же контейнере), а затем ссылка помещается в объект JSON позже после завершения загрузки изображения (с учетомпомните, что и изображение, и загрузка в формате json являются асинхронными, и первое будет происходить быстрее, чем второе). index.js
app.post('/newEV*', isLoggedIn, myDB.upload.single('image'), function(req, res) {
var myURL = req.path.replace('/newEV', '');
fetch(myURL).then(function (events){
var myID;
var x = 0;
while(!myID) {
if(!events[x]) {
myID = x;
} else {
x++;
}
}
myDB.newEvent(myURL, req.body.name, req.body.desc, req.body.loc, req.file.filename, req.body.link, req.body.cap, req.body.date, req.body.time, myID, events);
res.redirect('/edit' + myURL);
});
});
isLoggedIn
- это промежуточное ПО для проверки подлинности пользователя и, как видно ниже myDB.upload.array
должно загрузить изображение изформа на с3. myDB
module.exports = {
upload : multer({
storage: mulsters3({
s3: new aws.S3(),
bucket: S3_BUCKET,
key: function(req, file, cb) {
console.log(file);
cb(null, "imgs/" + file.originalname);
}
})
}),
newEvent : function(cata, name, desc, loc, pic, link, cap, date, time, id, events) {
var newEventObj = {
"id": id,
"name": name,
"desc": desc.replace('/\r?\n|\r/', '<br/>'),
"location": loc,
"picture": pic,
"link": link,
"cap": cap,
"date": date,
"time": time
}
var myJson;
switch (cata) {
case "Pr":
myJson = 'primaryEvents.json';
break;
case "Sc":
myJson = 'secondaryEvents.json';
break;
case "Po":
myJson = 'postEvents.json';
break;
}
events[id] = newEventObj; // Add new event to JSON object
signs3(JSON.stringify(events), myJson);
}
}
В настоящее время, когда код выполняется, я получаю эту ошибку:
(node:21049) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'filename' of undefined
at /home/tommy/Documents/cWeek044/index.js:292:79
at process._tickCallback (internal/process/next_tick.js:68:7)
Как происходит эта ошибка?Большое спасибо