无法在"app.post"函数中获取我的 if 语句



在我正在开发的项目/web应用程序中,用户可以创建一个新的帖子。他们创建的帖子中需要文本,照片是可选的。

我希望相关的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语句覆盖的图像,则需要不同的逻辑。

我尝试过";如果(req.files.image===null(";但什么都不管用。我收到错误消息"UnhandledPromiseRejectionWarning:TypeError:无法读取null的属性"image"。

然而,如果上传了图片,代码确实有效(代码首先跳过"if",转到"else"指令(。如果我用一个明显真实的语句替换"req.files.image===null",然后上传一篇没有照片的博客文章,代码也会起作用。有了这一点,我想我至少已经确定了错误所在——在代码的"if(req.files.image===null("行中——而不是代码中的任何其他地方,但我仍然无法解决它

您在使用中间件吗?

在Express4中,req.files在req对象上默认不再可用。要访问req.files对象上上传的文件,请使用多部分处理中间件,如busboy、multer、awebrable、multiparty、connect multiparty或pez。(https://expressjs.com/en/4x/api.html#req)

看起来req.files为空。尝试

if(!req.files || !req.files.image) {
  // req.files.image == null
} else {
  // req.files.image != null
}

您可能正在使用multer(或类似的(lib来处理随文件上传的表单数据。如果给定了一个文件,这些库通常只填充req.files字段。如果不是,则为undefined。你应该延长你的检查,看看req.files是否存在,例如:

if(!req.files || req.files.image === null) {
  await BlogPost.create({...req.body,userid:req.session.userId});
  res.redirect('/') 
}

相关内容

  • 没有找到相关文章

最新更新