首页 > 解决方案 > 检查用户是否存在于数据库中以获取 ID 以外的参数

问题描述

我创建了 3 个函数findOnecreateupdate。方法分别是GET, POST, PUT. 我更改了我的 API 路径,以前是/api/users/:id,现在是/api/users/:sub.

路线.js

module.exports = app => {
  const users = require("../controllers/user.controller.js");

  const router = require("express").Router();

  // Create a new User
  router.post("/", users.create);

  // Retrieve a single User with sub
  router.get("/:sub", users.findOne);

  // Update a User with sub
  router.put("/:sub", users.update);

  // Delete a User with sub
  router.delete("/:sub", users.delete);


  app.use('/api/users', router);
};

控制器.js

// Save User in the database
  User.create(user)
    .then(data => {
      res.send(data);
    })
    .catch(err => {
      res.status(500).send({
        message:
          err.message || "Some error occurred while creating the Users."
      });
    });
};


  // Find a single User with an id and sub
exports.findOne = (req, res) => {
  const sub = req.params.sub;
  

  User.findOne({sub})
  .then(data => {
    res.send(data);
  })
  .catch(err => {
    res.status(500).send({
      message: "Error retrieving User with id=" +sub 
    });
  });
};

// Update a User by the sub in the request
exports.update = (req, res) => {
  const sub = req.params.sub;

  User.update(req.body, {
    where: { sub }
  })
    .then(num => {
      if (sub) {
        res.send({
          message: "User was updated successfully."
        });
      } else {
        res.send({
          message: `Cannot update User with sub=. Maybe User was not found or req.body is empty!`
        });
      }
    })
    .catch(err => {
      res.status(500).send({
        message: "Error updating User with sub=" 
      });
    });
};

我想做的是:检查user_id身份验证提供者提供的是否存在于我的数据库中。
如果是,则使用该更新用户数据user_id

如果没有,创建一个新的用户记录

这是涉及的前端部分:

//INFO SAVE AND UPDATE CONDITION
    const userExist =  InfoDataService.get(data.sub)
    .then((response) => {
      console.log('find', response.data);
      return true;
    });
      
    

   if ( userExist ) {
    InfoDataService.create(data)
      .then((response) => {
        console.log('create', response.data);
        setInfo({
          id: response.data.id,
          sub: response.data.sub,
          email: response.data.email,
          firstname: response.data.firstname,
          lastname: response.data.lastname,
        });
      })
      
  } else {
    InfoDataService.update(sub, data)
      .then((response) => {
                
        console.log(response.data);
      })
      .catch((e) => {
        console.error(e);
      });
  }
  };

我认为userInDatabase只能给出trueor false,所以我将它用作if语句中的参数。它不起作用,只是更新。如果您需要任何其他信息,请询问,我刚刚开始,希望我已经提供了必要的信息。

编辑 通过findOne我可以在我的数据库中找到整个对象,但我认为将函数作为if条件可以给我true,如果它找到了带有它的对象sub; false如果他什么也没发现。

事实并非如此,实际上在我刚刚更新的代码中,虽然findOne可以正常工作,但它始终会继续执行并且只会创建。

标签: mysqlnode.jsreactjsexpresssequelize.js

解决方案


推荐阅读