mysql - 检查用户是否存在于数据库中以获取 ID 以外的参数
问题描述
我创建了 3 个函数findOne
:create
和update
。方法分别是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
只能给出true
or false
,所以我将它用作if
语句中的参数。它不起作用,只是更新。如果您需要任何其他信息,请询问,我刚刚开始,希望我已经提供了必要的信息。
编辑
通过findOne
我可以在我的数据库中找到整个对象,但我认为将函数作为if
条件可以给我true
,如果它找到了带有它的对象sub
; false
如果他什么也没发现。
事实并非如此,实际上在我刚刚更新的代码中,虽然findOne
可以正常工作,但它始终会继续执行并且只会创建。
解决方案
推荐阅读
- math - 计算没有条件的电机运动
- node.js - HTTP cookie 不适用于 localhost 子域
- reactjs - 如何使元素停止在其原始位置(机车滚动)
- python-3.x - 如何在不重新启动变量声明的情况下重新启动程序
- git - 签出且未合并 Visual Studio 时,添加到分支 dev 的文件显示在另一个分支中
- php - 发布产品(WordPress)时添加产品详细信息?
- flutter - 如何在 Flutter 中正确扩展自定义 Provider
- docker - 来自 docker 容器内部的 curl 请求在 Amazon 登录页面触发 Captcha
- python - 如何改进决策树图?
- python - 如何使用 python 插入 PostgreSQL 中的 JSONB 列?