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

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

本文关键字:js 查找 mongoDB 对象 Node 何使用 Express Mongoskin      更新时间:2023-09-26

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

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

  //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 请求。非查找请求将返回集合中的所有用户,我可以搜索返回的数组,但在数百个用户的情况下,这似乎不是最佳选择。如何使用快速路由和 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);
          }
      });
  });

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