Как найти объект mongoDB с помощью Express, Mongoskin и Node.js

Я пытаюсь создать страницу входа, запрашивая учетные данные пользователя, а затем пытаясь найти этого пользователя в коллекции mongoDB. Я не могу получить ни один объект, возвращенный из mongoDB, а скорее весь список пользователей.

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. Запрос без поиска вернет всех пользователей в коллекции, и я мог бы выполнить поиск в этом возвращаемом массиве, но в случае сотен пользователей это не лучший вариант. Как мне правильно сделать запрос GET, используя экспресс-маршруты и Mongoskin?

Спасибо.


person Nic Gaudio    schedule 13.01.2015    source источник
comment
решение в стороне, не помещайте пароли в запросы GET...   -  person dandavis    schedule 13.01.2015
comment
в вашей базе данных .. какое имя поля, где имена пользователей? .. имя пользователя?   -  person    schedule 13.01.2015
comment
Да, это поле — имя пользователя, поскольку каждый объект mongoDB имеет свойство имени пользователя.   -  person Nic Gaudio    schedule 13.01.2015
comment
передать req.body.username вместо req.body   -  person V31    schedule 13.01.2015


Ответы (1)


Вы должны использовать метод 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);
          }
      });
  });

Кроме того, этот код защитит ваши конфиденциальные данные.

person Community    schedule 13.01.2015