如何使用 Express、Mongoskin 和 Node.js 查找 mongoDB 对象

How to find mongoDB Object with Express, Mongoskin, and Node.js

我正在尝试通过询问用户凭据然后尝试在 mongoDB 集合中找到该用户来创建登录页面。我无法从 mongoDB 获得单个对象 returned,而是整个用户列表。

html,使用 Jade 设置,如下所示:

  //User Login Page
  #login
      h2 User Login
      fieldset
          input#inputUsername(type='text', placeholder='Username')
          button#btnLogin Login
  // /User Login 

JavaScript 边看起来像这样:

//Request user credentials on button click
function loginRequest() {
    var userCreds = {
        'username': $('#login fieldset input#inputUsername').val()
    };

    $.getJSON('/users/loginRequest', userCreds, function (data) {
        console.log(data);
    });
}

使用 Express 和 Mongoskin,路由到此:

//GET Login User 
router.get('/loginRequest', function (req, res) {
    var db = req.db;
    db.collection('authorizedUsers').find(req.body).toArray(function (err, items) {
        res.json(items);
    });
})

问题是我无法将特定的登录信息(用户名)正确传递给 GET 请求。非查找请求将 return 集合中的所有用户,我可以搜索 returned 数组,但对于数百个用户,这似乎不是最佳选择。如何使用 Express 路由和 Mongoskin 正确发出 GET 请求?

谢谢。

你应该使用 findOne 方法,并使用 name="username" 传递输入值,他们使用 req.param("username");

使用此代码:

玉:

  #login
      h2  User Login  
        form(role='form', method='get', action='/users/loginRequest')
          input#inputUsername(name='username', type='text', placeholder='Username')

          button#btnLogin(type='submit') Login

在你的路线中:

  router.get('/loginRequest', function (req, res) {
      var username = req.param("username");

      db.collection('authorizedUsers').findOne(username: username}, function(err, items) {
          if(err) {
              return console.log('findOne error:', err);
          }
          else {
            res.json(items);
          }
      });
  });

此外,此代码将保护您的敏感数据。