MongooseJS findOne()出乎意料的结果

时间:2016-02-05 10:14:50

标签: javascript node.js express mongoose

将Mongoose用作NodeJS的ODM,但不完全了解错误处理的工作原理。它有效,但看起来不对,并且不符合文档,所以我担心沿着这条路走下去会困扰我。

例如,这是一条基本的登录路线:

app.post('/signin', function(req, res){
    var email = req.body.email;
    var password = req.body.password;
    mongoose.model('User').findOne({
        email: email,
        password: password
    }, function(err, user){
        if (err){
            console.log('Database Error')
            return res.json({error: 'Database Error'})
        } else {
            if (!user) {
                console.log('User not found.');
                return res.json({error: 'Email and/or password incorrect.'})
            } else {
                console.log('User ' + user.email + ' found. Logging in.');
                res.json({
                token: jwt.sign({}, 'top-secret', {subject: user}),
                data: data[user] 
                })
            }
        }
    })
})

我特别担心:

if (err) {
    //do something
} else {
    if (!user){
        //do something else
    } else {
        //log the user in
    }
}

在今天之前没有真正使用过Mongo,但这感觉就像很多条件错误处理一样。有没有我在这里不能正确理解的东西?

1 个答案:

答案 0 :(得分:1)

将作为评论发布,但更容易将其粘贴为答案..

您可以简化if-else嵌套,因为您在每个条件结束时返回,如下所示:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<DIV CLASS="box" STYLE="width:100%"><TABLE STYLE="width:100%"><TR><TH STYLE="width:220px">link</TH><TH STYLE="width:140px">foryou</TH><TH STYLE="width:140px">Timer</TH><TH/></TR><TR><TD><A CLASS="flink" HREF="https://www.google.com" TARGET="_blank">mylink</A></TD><TD>hi</TD><TD><SPAN CLASS="timer" data-minutes="1" data-secleft="0">Ready</SPAN></TD></TR><TR><TD><A CLASS="flink" HREF="https://www.google.com" TARGET="_blank">mylink</A></TD><TD>hi</TD><TD><SPAN CLASS="timer" data-minutes="1" data-secleft="0">Ready</SPAN></TD></TR>
</TABLE></DIV>