gpt4 book ai didi

javascript - knex 仅在用户名不存在时添加用户名

转载 作者:行者123 更新时间:2023-11-29 14:15:00 26 4
gpt4 key购买 nike

我正在使用 knex。想要一种简单的方法来检查用户名是否存在于数据库中。如果是,则返回错误消息(“用户名已存在”)。如果不是,则插入。

router.post('/register', (req, res) => {

const username = req.body.username;
const email = req.body.email;
const password = req.body.password;

knex('users')
.insert([{
username: req.body.username,
email: req.body.email,
password: bcrypt.hashSync(req.body.password, 10)
}]).then(()=>{})
})

已更新好的,我的程序按预期工作。它仅在表中不存在用户名和电子邮件时插入。但是,我在编写这段代码时遇到了两个问题。

请注意,我对 knex 库和 promises 还很陌生。

  1. 性能,我的整个应用都变慢了
  2. 我的 if/else 语句最终总是运行这两个命令,但是,如果电子邮件或用户名存在,它永远不会插入到数据库中。但是我总是看到 console.log 即使它没有插入。

     const insertUser = knex('users')
    .returning('id')
    .insert([{
    username: req.body.username,
    email: req.body.email,
    password: bcrypt.hashSync(req.body.password, 10)
    }]).then(userNameValid => {console.log(userNameValid)})

    const validityCheck = knex.select("username")
    .from("users")
    .where("username", username)
    .andWhere("email", email)
    .then(userNametList => {
    console.log(userNametList)
    })

    if (!validityCheck){
    return insertUser;
    } else if (validityCheck !== null){
    return console.log('Username or email is already in use')
    }

最佳答案

没有一次性的 knex 功能。如果您对用户名有唯一约束(正如您应该的那样),那么您可以插入并在失败时捕获。失败消息将进入捕获处理程序。

更好的做法是先进行选择,只有在插入不存在时才尝试插入,否则在尝试插入之前返回错误消息。

更新问题的更新答案:insertUser promise 在创建时执行,因此您始终插入用户(如果违反唯一约束则失败)。

您的变量 validityCheck 是一个 promise ,因此 !validityCheck 将始终为 false

您要做的是在有效性检查的 .then( ...) block 中创建插入用户 promise ...

knex.select("username")
.from("users")
.where("username", username)
.andWhere("email", email)
.then(userNametList => {
if (userNameList.length === 0) {
return knex('users')
.returning('id')
.insert([{
username: req.body.username,
email: req.body.email,
password: bcrypt.hashSync(req.body.password, 10);
}])
.then((newUserId) => {
console.log('inserted user', newUserId);
});
}
console.log('not inserting user');
return;
});

关于javascript - knex 仅在用户名不存在时添加用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52231054/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com