Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.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
Javascript req.login没有记录用户_Javascript_Ajax_Node.js - Fatal编程技术网

Javascript req.login没有记录用户

Javascript req.login没有记录用户,javascript,ajax,node.js,Javascript,Ajax,Node.js,我试图做的是使用ajax向服务器发送post请求,并确保post请求不会刷新页面(使用e.default)。在服务器上,我想检查用户名或电子邮件是否已使用,如果未使用,则自动登录用户,然后刷新页面。问题是,当我调用req.login并提交要登录的数据时,它似乎不起作用,但页面仍会刷新。有什么想法吗 app.post('/signup', function (req, res) { var userDetails = User({ username: req.body.username,

我试图做的是使用ajax向服务器发送post请求,并确保post请求不会刷新页面(使用e.default)。在服务器上,我想检查用户名或电子邮件是否已使用,如果未使用,则自动登录用户,然后刷新页面。问题是,当我调用req.login并提交要登录的数据时,它似乎不起作用,但页面仍会刷新。有什么想法吗

app.post('/signup', function (req, res) {
var userDetails = User({
    username: req.body.username,
    email: req.body.email,
    password: bcrypt.hashSync(req.body.password1, bcrypt.genSaltSync(10))
});

User.findOne({
    $or: [{
        'username': req.body.username
    }, {
            'email': req.body.email
        }]
}, function (err, user) {
    if (user) {
        if (allClients.indexOf(req.body.socket)) {
            if (user.username === req.body.username) {
                io.to(req.body.socket).emit('userInfo', 'That username is already in use.');
            } else {
            }
            if (user.email === req.body.email) {
                io.to(req.body.socket).emit('userInfo', 'That email is already in use.');
            } else {
            }
        } else {
            console.log('timeout error 822')
        }
    } else {
        req.login(userDetails, function (err) {
            if (!err) {
                userDetails.save(function (err) {
                    if (err) throw err;
                    res.redirect('/');
                });
            } else {
                console.log(err)
            }
        })
    }
    if (err) {
        return done(err);
    }
});
});
这里是我发出ajax post请求的地方。如您所见,我正在阻止表单提交以刷新页面,但如果表单成功,它将提交

$("#form1").submit(function(e) {
        e.preventDefault();
        $.ajax({
            type: "POST",
            url: '/signup',
            data: $(this).serialize(),
            success: function(data)
            {
                window.location.reload(true);
            }
        });
 });

我相信您的API认为您的“已录制”消息是成功的。
您可以在这些情况下抛出错误,并使用
$.ajax
捕获
,或者在
成功时设置不同的响应并读取
数据

当我从ajax调用中删除e.preventDefault时,一切似乎都正常工作。有没有一种方法可以告诉我,在数据保存到mongo store之后,服务器请求ajax停止e.preventDefault函数并继续重定向(“/”)?我认为这不是最好的方法。添加一个
.error()
(或
.fail()
,具体取决于您使用的jQ版本)以检查返回的内容。或者控制台日志
data
on
success
…在这种情况下,当我向客户端发出请求时,我如何向ajax请求抛出错误?您如何处理http响应?我是说,状态码。很抱歉,我是NodeJS的初学者。我真的不知道该说什么。我正在再次尝试我写的东西,看起来大多数时候我发布表单req.user exist,一切正常,但有时req.user是未定义的。我将进一步研究这个问题。谢谢你的帮助。