gpt4 book ai didi

javascript - 检查用户是否存在于 Rethinkdb 数据库中

转载 作者:行者123 更新时间:2023-11-30 15:19:03 24 4
gpt4 key购买 nike

我正在使用 rethinkdb 将用户添加到用户表中。我已经很好地添加了用户,并且在数据资源管理器中看到了正确的数据。我现在有点难过的是,一旦有人添加了新用户名,我如何检查数据库以查看它是否存在,如果存在,则添加新用户。我想我可以从数据库中获取所有当前用户,并根据我要添加的新用户名循环检查他们。这是我正在尝试的:

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

let newUser = req.body.username,
currentUsers = [];

r.db('base').table('users')
.then((users) => {
users.forEach((user) => {
currentUsers.push(user.username)
});
}).then(() => {

if (currentUsers.length === 0) {
addUser(req.body);
}

currentUsers.forEach((name) => {

if (newUser !== name) {
console.log('new user added!');
addUser(req.body);
}

if (newUser === name) {
console.log('user exists!');
}

}); // end forEach()

}); // end last .then()


function addUser(user) {
Users.create(user, (error, response) => {
if (error) return res.end();
});
} // end addUser(user)


}); // end router.post()

我这里的思路是在数据库为空的情况下,调用addUser函数添加第一个用户名。这很好用,但是当我尝试添加多个新用户时,事情就变得不稳定了。假设我在数据库中有用户名 Dan。如果我再次尝试添加 Dan,它会在不应该的时候运行 addUser 函数,并且控制台会给我两条消息:

user exists!
new user added!

每次我尝试添加新用户时,它也会开始将数据库名称加倍和加倍等。我在这里做错了什么?我对 rethinkdb 有点陌生,所以我想我做错了。我能得到的任何帮助都会很棒。多谢你们。

最佳答案

很高兴知道你解决了它。但是你正在获取所有用户,将它们暂时放在服务器的内存中,循环遍历每个用户,只是为了检查新用户是否存在!这很慢,很耗费内存,而且没有必要。

以下是您可以做得更好的地方:

  1. 将“用户”表的主键更改为“用户名”。 Here is how to do so ,您将需要使用选项 primaryKey
  2. 使用下面的 ReQL 插入新用户,这将在表中插入新用户仅当用户名不存在时:

-

r.db("my_db").table("users").insert(newUser, {conflict: "error"});

所有代码都在一行中完成:)

或者,如果您只想检查“用户名”是否存在而不插入,您可以这样做:

r.db("my_db").table("users").filter({username: newUserName}).count().eq(1);

关于javascript - 检查用户是否存在于 Rethinkdb 数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44035859/

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