在我正在处理的项目/网络应用程序中,用户可以创建新帖子。他们创建的帖子中需要文本,照片是可选的。我希望相关的 app.post 语句根据帖子中是否包含图片来执行不同的操作。这是我的代码: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 语句”来检查这个值是否存在,如果不存在,那么将遵循相关逻辑以便发布帖子。如果包含图像,则需要不同的逻辑,这由 else 语句涵盖。我尝试了“if(req.files.image===null)”的变体,但没有任何效果。我收到错误消息“UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'image' of null”。但是,如果上传了图片,代码确实有效(代码首先跳过“if”并转到“else”指令)。如果我用明显真实的陈述替换“req.files.image===null”,然后我上传一篇没有照片的博文,代码也能正常工作。有了这个,我想我至少已经查明了错误所在 - 在代码的'if(req.files.image === null)'行中 - 而不是代码中的其他任何地方,但我仍然无法弄清楚如何要解决这个问题。
2 回答
茅侃侃
TA贡献1842条经验 获得超21个赞
你在使用任何中间件吗?
在 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条经验 获得超7个赞
您可能正在使用 multer(或类似的)库来处理文件的表单数据上传。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
提交
取消