Javascript 无法在';app.post';工作职能

Javascript 无法在';app.post';工作职能,javascript,node.js,express,Javascript,Node.js,Express,在我正在使用的project/web应用程序中,用户可以创建新帖子。他们创建的帖子中需要文本,照片是可选的 我希望相关的app.post语句根据帖子中是否包含图片执行不同的操作。这是我的代码: app.post('/posts/store', async(req,res)=>{ if(req.files.image===null){ await BlogPost.create({...req.body,userid:req.session.userI

在我正在使用的project/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('/') 
    });
   };
})
如果post中没有包含图像,那么就不应该有req.files.image这样的值。我的想法是使用一个“if语句”来检查这个值是否存在,如果不存在,那么将遵循相关的逻辑,以便发布帖子。如果包含图像,则需要不同的逻辑,而else语句涵盖了该图像

我尝试过“if(req.files.image==null)”的变体,但没有任何效果。我收到错误消息“UnhandledPromisejectionWarning:TypeError:无法读取null的属性“image”


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

您可能正在使用multer(或类似的)lib来处理带有文件的表单数据上传。如果给定了文件,这些LIB通常只填充
req.files
字段。如果没有,它将是未定义的。您应该扩展检查范围,查看是否存在
req.files
,例如:

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

您可能正在使用multer(或类似的)lib来处理带有文件的表单数据上传。如果给定了文件,这些LIB通常只填充
req.files
字段。如果没有,它将是未定义的。您应该扩展检查范围,查看是否存在
req.files
,例如:

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

你在使用中间件吗

在Express 4中,默认情况下req对象上不再提供req.files。要访问req.files对象上上传的文件,请使用多部分处理中间件,如busboy、multer、Foremble、multiparty、connect multiparty或pez。()

似乎
req.files
为空。 试一试


你在使用中间件吗

在Express 4中,默认情况下req对象上不再提供req.files。要访问req.files对象上上传的文件,请使用多部分处理中间件,如busboy、multer、Foremble、multiparty、connect multiparty或pez。()

似乎
req.files
为空。 试一试