我创建了一个form
,允许登录的用户将事件信息上传到我的Web应用程序中。表单中的文本被制成JSON
对象,然后从那里修改为现有的JSON文件并上传到Amazon-S3
。此外,用户可以上传带有事件的图像,该图像分别在/ imgs子文件夹(位于同一存储桶中)中上传到S3,然后在图像完成上传后将链接放入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
应该将图像从表单上传到s3。
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)
为什么会发生此错误?非常感谢