mongodb 我在Express服务器上的GET请求出现404错误

cl25kdpy  于 2023-03-29  发布在  Go
关注(0)|答案(2)|浏览(165)

我正在编写一个express端点,以便使用电子邮件从我的mongoDB数据库获取用户凭据,但是当我使用postman测试端点时,返回了一个404错误。

/**GET: http://localhost:9000/api/user/success123@gmail.com */ //url endpoint
export async function getUser(req, res){
const { email } = req.params;

 try {
    if(!email) return res.status(501).send({ error: "Invalid Username"})

    UserModel.findOne({ email }, function(err, user){
        if(err) return res.status(500).send({ err });
        if(!user) return res.status(501).send({ error: "Couldn't Find User"});

        return res.status(200).send(user)
    })
    
 } catch (error) {
    return res.status(404).send({ error: "Cannot find user data"})
 }
}

注:
1.电子邮件地址存在于我的mongoDBMap集中,我已经检查过了。
1.我在postman中使用GET方法
但我的 Postman 一直显示404错误'找不到用户数据'
我错过了什么?

31moq8wy

31moq8wy1#

我猜你需要考虑使用percent-encoding对电子邮件地址中的“@”符号进行编码,如下所示:

GET: http://localhost:9000/api/user/success123%40gmail.com

但是,我建议您将email作为body参数传递,而不是参数。

k97glaaz

k97glaaz2#

mongoose不再支持findOne()中的回调函数。您可以将数据保存在变量中或使用.then().catch()块。
下面是你的代码的解决方案的例子:

export async function getUser(req, res) {
  const { email } = req.params;
    
  try {
    if (!email)
      return res.status(501).json({ error: "Invalid Username" })
    
    await UserModel.findOne({ "email": email })
      .then((docs) => {
        return res.status(201).json(docs)
      })
      .catch((err) => {
        return res.status(501).json(err)
      });
  } catch (error) {
    return res.status(404).send({ error: "Cannot find user data" })
  }
}

这里有一些你必须考虑的事情,
1.不要忘记在async函数中使用await关键字。
1.尝试用Ecmascript编写代码
1.在findOne()中使用键值对。使用{ "email": email }而不是{ email }
希望这能有所帮助!

相关问题