MongoDB .find在shell中工作但不在js

时间:2016-03-19 22:13:17

标签: javascript node.js mongodb express

我是Node Express Mongo的新手,所以在按照一些教程后我想尝试重写我自己的婴儿网站。这是一个login页面。其他人的代码对我有用,但是当我尝试它时,我的方式并不起作用。我也查阅了文档,他们做了db.bios.find( { _id: 5 } )之类的东西,这是我试图模仿的东西

db为ShipDB,集合为users,我试图找到的文档是

{
        "_id" : ObjectId("56edc18064e429581541808a"),
        "username" : "username",
        "password" : "password"
}

下面,我正在连接,如果result.length,则重定向到主页。我已经尝试在网站上正确输入usernamepassword,但它表示登录无效。 console.log(result.length)打印出undefined?这是为什么?这是logcat:

Connection established successfully
undefined
{ username: 'username', password: 'password' }



router.post('/validate', function(req, res) {
    var MongoClient = mongodb.MongoClient;
    var url = "mongodb://localhost:27017/"+database_name;
    MongoClient.connect(url, function(err, db) {
       if(!err) {
           console.log("Connection established successfully");
           var user_collection = db.collection(collection_name_users);
           var user_login_input = {
               username: req.body.username,
               password: req.body.password
           };
           // THIS IS THE FUNCTION THAT I HAVE A PROBLEM WITH!!!!
           user_collection.find(
               {
                   username: req.body.username,
                   password: req.body.password
               }, function(err, result) {
                   if(!err) {
                       console.log(result.length);
                       if (result.length) {
                           // Successful login
                           req.session.user = result;
                           delete req.session.user.password;
                           res.redirect("home");
                       } else {
                           console.log(user_login_input);
                           res.send("Invalid login");
                       }

                       db.close();
                   } else {
                       console.log(err);
                   }
           });

       } else {
           console.log("Cannot connect ", err);
       }
    });

});

我尝试的事情:

  • user_collection.find(user_login_input, function(err, result) {...

  • user_collection.find({ "username": req.body.username, "password": req.body.password })...

  • 适用于mongoshell:

enter image description here

感谢您的时间。

编辑:findOne看起来已被弃用

enter image description here

1 个答案:

答案 0 :(得分:1)

我认为node.js与mongo shell的结果相同,但result不是数组,而result.lengthundefined。您可以做的是先检查result是数组还是对象。

console.log(user_login_input);行给出了正确的输出{ username: 'username', password: 'password' }