Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript HTTP DELETE的RESTful API不检查null_Javascript_Rest_Express_Mongoose_Http Delete - Fatal编程技术网

Javascript HTTP DELETE的RESTful API不检查null

Javascript HTTP DELETE的RESTful API不检查null,javascript,rest,express,mongoose,http-delete,Javascript,Rest,Express,Mongoose,Http Delete,我目前正在为一个Web服务编写一个RESTful API,但我遇到了麻烦。我试图删除一封邮件,但首先我想检查该邮件是否存在。我的问题是,它不会检查邮件是否为空,也不会以404响应。我正在与《快车》和《猫鼬》合作 router.delete('/:id',(req,res)=>{ const{id}=req.params; Mail.findById(id) .exec() 。然后((邮件)=>{ 如果(!邮件){ console.log(mail)//返回null 返回资源状态(404); }

我目前正在为一个Web服务编写一个RESTful API,但我遇到了麻烦。我试图删除一封邮件,但首先我想检查该邮件是否存在。我的问题是,它不会检查邮件是否为空,也不会以404响应。我正在与《快车》和《猫鼬》合作

router.delete('/:id',(req,res)=>{
const{id}=req.params;
Mail.findById(id)
.exec()
。然后((邮件)=>{
如果(!邮件){
console.log(mail)//返回null
返回资源状态(404);
}
})
.那么(
Mail.deleteOne({u id:id})
.exec()
.然后(()=>{
res.status(200).json({
邮件:“邮件已删除”,
});
})
.catch((错误)=>{
res.status(500).json({error:err});
})
);
});

我认为您必须在first-then块中执行代码的删除部分,作为else语句。您没有返回下一个then块可以使用的任何内容

你可以做:

Mail.findById(id)
      .exec()
      .then((mail) => {
        if (!mail) {
          console.log(mail) // returns null
          return res.status(404).send() //need to send response;
        }
        Mail.deleteOne({ _id: id })
          .exec()
          .then(() => {
            res.status(200).json({
              message: 'Mail deleted',
            });
          })
      }).catch((err) => {
            res.status(500).json({ error: err });
      })
专业提示:如果您不知道,请学习异步等待。代码将看起来更干净

那么它看起来是这样的:

router.delete('/:id', async (req, res) => {
    const { id } = req.params;

    try {
      const mail = await Mail.findById(id);
      if(!mail) {
         return res.status(404).send();
      }

      await Mail.deleteOne({_id: id});      
      res.status(200).json({
              message: 'Mail deleted',
            });
    } catch(e) {
      res.status(500).json({ error: err });
    }

你能在你的问题中添加关于预期行为和实际行为的信息吗?是的,对不起。如果邮件为空,我希望以404的HTTP状态码响应。否则,应继续删除找到的邮件谢谢。您是对的,使用async/await时看起来更干净。我会调查的。它也适用于您给meGreat的代码,很乐意帮助:)!