列nodejs的GEt值为rest和Express

时间:2015-07-19 03:09:24

标签: node.js mongodb express collections cursor

我正在尝试获取列名值或多个列名值,但我没有获得它。我是Nodejs的新手,但调试它甚至很难。这是我的代码:

var express = require('express');
var app = express();
var mongodb = require('mongodb');

var MongoClient  = mongodb.MongoClient;

    MongoClient.connect(url, function (err, db) {
        if (err) {
            console.log('Unable to connect', err);
        } else {
            console.log('Connected');

            var collection = db.collection('users');

            app.get('/db', function (request, response) {
                collection.find({username: request.query.username, password: request.query.password}).toArray(function(err, docs) {
                    docs.forEach(function(doc) {
                        console.log(doc.toArray());
                        });
                    });
                });

        }
        db.close();
    });

我基本上验证在db中输入的用户名和密码是否与我的REST查询匹配,如果是,则打印成功或重定向到新页面等。

1 个答案:

答案 0 :(得分:0)

对于初学者来说,除非你实际上期待不止一个用户"分享相同的"用户名"和#34;密码"那么你最好使用.findOne()进行单数响应。

然后返回的只是一个普通的JavaScript对象,所以只需引用属性:

 collection.findOne(
    {
       username: request.query.username,
       password: request.query.password
    },
    function(err,doc) {
       if (err) throw err;
       console.log( doc.username );  // Just the username value
    }
 );

如果当然是"什么都不是"返回并且没有"错误"然后你没有用你的标准匹配任何东西,所以要么"用户名"或"密码"是错的。

这是基本的练习,但实际上,身份验证是很久以前构建的一个轮子,您可能更好地实现现有模块来处理它。

摆脱db.close() 。这里的函数是异步的,这将在其他任何事情完成之前执行。你基本上不想在现实世界的应用程序中调用它。