mongoose 我无法在我的后端Express上修复此错误

ddarikpa  于 2023-01-21  发布在  Go
关注(0)|答案(1)|浏览(129)

我有一个端点,它在我的数据库中创建一个新服务器,当我说服务器时,它只是一个服务器名称。我们有几个游戏服务器,所以,我们希望从一个网站管理它们,

const createServer = asyncHandler(async (req, res) => {
  const { gameName, serverName } = req.body;
  const serverExist = await Server.findOne({ serverName });

  if (!gameName || !serverName) {
    res.status(400);
    throw new Error("Please add game name / server name");
  }
  if (!serverExist?.isHidden) {
    // if i set it to just serverExists it works
    res.status(401);
    throw new Error("Server exist");
  }
  //Get user using the id in the JWT
  const user = await User.findById(req.user.id);
  if (!user) {
    res.status(401);
    throw new Error("User not found");
  }
  const server = {
    gameName,
    serverName,
    user: req.user.id,
  };
  await Server.create(server);
  res.status(201).json(server);
});

现在,我检查服务器是否已经存在于serverExist的数据库中,它返回关于该服务器的所有文档,所有工作正常。它有一个名为isHidden的属性,当我在if语句中设置它时,服务器无法返回任何响应。如果我将if语句设置为仅if(serverExist),它确实工作,但我需要它的工作,如果服务器被设置为隐藏,以便用户可以重新创建它。我不想删除,因为它将是以后需要的。
我检查了所有的返回,看起来都没问题,甚至最后的服务器对象也有信息。问题是在我调用create方法的时候发生的。不知道为什么添加serverExist.isHidden会使它无法创建文档!

ev7lccsx

ev7lccsx1#

你逻辑上有点问题。
在计算!serverExist?.isHidden...时考虑这些状态
| 州|!serverExist?.isHidden|
| - ------|- ------|
| 不存在记录|true️|
| 存在isHidden: true的记录|false|
| 存在isHidden: false的记录|true|
我将在查询中包含isHidden参数并使用Server.exists()方法

const serverExists = await Server.exists({ serverName, isHidden: true });

if (serverExists) {
  // Server exists and is not hidden
  res.status(409); // 409 Conflict is a better status than 401 Unauthorized
  throw new Error("Server exists");
}

相关问题