为了账号安全,请及时绑定邮箱和手机立即绑定

无法使“app.post”函数中的 if 语句起作用

无法使“app.post”函数中的 if 语句起作用

繁花不似锦 2023-06-09 14:45:32
在我正在处理的项目/网络应用程序中,用户可以创建新帖子。他们创建的帖子中需要文本,照片是可选的。我希望相关的 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

}


查看完整回答
反对 回复 2023-06-09
?
吃鸡游戏

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('/') 

}


查看完整回答
反对 回复 2023-06-09
  • 2 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信