繁花不似錦
2023-06-09 14:45:32
在我正在處理的項目/網(wǎng)絡應用程序中,用戶可以創(chuàng)建新帖子。他們創(chuàng)建的帖子中需要文本,照片是可選的。我希望相關的 app.post 語句根據(jù)帖子中是否包含圖片來執(zhí)行不同的操作。這是我的代碼:app.post('/posts/store', async(req,res)=>{ if(req.files.image===null){ await BlogPost.create({...req.body,userid:req.session.userId}); res.redirect('/') } else { let image = req.files.image; image.mv(path.resolve(__dirname, "public/img",image.name),async(error)=>{ await BlogPost.create({...req.body, image:"/img/"+image.name, userid:req.session.userId}); res.redirect('/') }); };})如果帖子中沒有包含圖像,則不應有 req.files.image 這樣的值。我的想法是有一個“if 語句”來檢查這個值是否存在,如果不存在,那么將遵循相關邏輯以便發(fā)布帖子。如果包含圖像,則需要不同的邏輯,這由 else 語句涵蓋。我嘗試了“if(req.files.image===null)”的變體,但沒有任何效果。我收到錯誤消息“UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'image' of null”。但是,如果上傳了圖片,代碼確實有效(代碼首先跳過“if”并轉(zhuǎn)到“else”指令)。如果我用明顯真實的陳述替換“req.files.image===null”,然后我上傳一篇沒有照片的博文,代碼也能正常工作。有了這個,我想我至少已經(jīng)查明了錯誤所在 - 在代碼的'if(req.files.image === null)'行中 - 而不是代碼中的其他任何地方,但我仍然無法弄清楚如何要解決這個問題。
2 回答

茅侃侃
TA貢獻1842條經(jīng)驗 獲得超22個贊
你在使用任何中間件嗎?
在 Express 4 中,默認情況下 req.files 在 req 對象上不再可用。要訪問 req.files 對象上的上傳文件,請使用多部分處理中間件,如 busboy、multer、formidable、multiparty、connect-multiparty 或 pez。
好像req.files
是空的。嘗試
if(!req.files || !req.files.image) {
? // req.files.image == null
} else {
? // req.files.image != null
}

吃雞游戲
TA貢獻1829條經(jīng)驗 獲得超7個贊
您可能正在使用 multer(或類似的)庫來處理文件的表單數(shù)據(jù)上傳。req.files如果給定文件,這些庫通常只會填充該字段。如果不是,它將是undefined。您應該擴展檢查并查看是否req.files存在,例如:
if(!req.files || req.files.image === null) {
await BlogPost.create({...req.body,userid:req.session.userId});
res.redirect('/')
}
添加回答
舉報
0/150
提交
取消