Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js-检查用户是否存在_Node.js_Mongodb_Express_Authentication_Passport.js - Fatal编程技术网

Node.js-检查用户是否存在

Node.js-检查用户是否存在,node.js,mongodb,express,authentication,passport.js,Node.js,Mongodb,Express,Authentication,Passport.js,我使用NodeJS和passport让用户在看到刚刚参加的测验结果之前创建一个帐户。我的挑战是,我需要在页面刷新之前确认用户名是否可用,因为如果发生这种情况,用户将丢失其结果 再次声明:我需要在刷新之前验证用户名是否未被使用 我想我很接近,但它不起作用。如何更改代码以应对此挑战 当前,如果使用用户名,则在尝试创建帐户时会返回一个错误,并且用户会出现在/failpage上,如下所示 app.post('/quiz', usernameToLowerCase, emailToLowerCase, f

我使用NodeJS和passport让用户在看到刚刚参加的测验结果之前创建一个帐户。我的挑战是,我需要在页面刷新之前确认用户名是否可用,因为如果发生这种情况,用户将丢失其结果

再次声明:我需要在刷新之前验证用户名是否未被使用

我想我很接近,但它不起作用。如何更改代码以应对此挑战

当前,如果使用用户名,则在尝试创建帐户时会返回一个错误,并且用户会出现在/failpage上,如下所示

app.post('/quiz', usernameToLowerCase, emailToLowerCase, function(req, res) {


    User.findOne({
        username: req.body.username
    }, function(err, user) {
        if (err) {
            alert(err)
            if (user) {
                alert('this username is already taken. Please choose another.')
                console.log('there was a user');
                return false;

            }
        }
    });

    var user = new User({
        username: req.body.username,
        email: req.body.email,
        password: req.body.password,
    })



    user.save(function(err) {
        console.log('this is the problem' + ' ' + err)
        if (err) {
            return res.redirect('/failpage')
        }


        req.logIn(user, function(err) {
            if (err) {
                console.log(err);
            }
            console.log('all looks good')
            res.redirect('/results');
        });
    });
});

为了解决你的问题,我认为你需要改变路线。至少有一个
app.get('/quick')
,如果用户存在或不存在,则返回布尔值on。部分
User.findOne
可以通过该路径发送。当他松开表单用户名字段的焦点时,您只需使用ajax发出请求,并显示一个通知,说明该名称是否可用。

要解决您的问题,我认为您需要路由。至少有一个
app.get('/quick')
,如果用户存在或不存在,则返回布尔值on。部分
User.findOne
可以通过该路径发送。当他松开表单用户名字段的焦点时,您只需使用ajax发出请求,并显示一条通知,说明该名称是否可用。

如果有其他人尝试执行相同的操作,则可以使用此方法解决此问题:

在app.js中

app.get('/usercheck', function(req, res) {
    User.findOne({username: req.query.username}, function(err, user){
        if(err) {
          console.log(err);
        }
        var message;
        if(user) {
          console.log(user)
            message = "user exists";
            console.log(message)
        } else {
            message= "user doesn't exist";
            console.log(message)
        }
        res.json({message: message});
    });
});
在js中


如果其他人也在尝试做同样的事情,就用这个来解决它:

在app.js中

app.get('/usercheck', function(req, res) {
    User.findOne({username: req.query.username}, function(err, user){
        if(err) {
          console.log(err);
        }
        var message;
        if(user) {
          console.log(user)
            message = "user exists";
            console.log(message)
        } else {
            message= "user doesn't exist";
            console.log(message)
        }
        res.json({message: message});
    });
});
在js中


你需要打回电话谢谢@SLaks。在user.save回调?中,请设置适当的代码格式,使其可读。如果您能让我们更容易地阅读/理解您的代码,您就更有可能获得帮助。另外,当数据库中已经存在该名称时,您希望发生什么?您希望发送什么类型的响应。您无法在服务器上执行
alert()
。我想在屏幕上通知用户,让他们在不刷新页面的情况下重试。您需要在CallbackThank@SLaks中运行。在user.save回调?中,请设置适当的代码格式,使其可读。如果您能让我们更容易地阅读/理解您的代码,您就更有可能获得帮助。另外,当数据库中已经存在该名称时,您希望发生什么?您希望发送什么类型的响应。您无法在服务器上执行
alert()
。我想在屏幕上通知用户,让他们在不刷新页面的情况下重试。感谢您的帮助!你能给我举个例子吗?还有,我该如何到达“获取”路线?我要做表格吗?谢谢你的帮助!你能给我举个例子吗?还有,我该如何到达“获取”路线?我做表格吗?