Как разместить некоторые данные и получить результаты с помощью стека MEAN и ngResource

0

Я работаю над приложением, и я использую стек MEAN как технологию. В AngularJS я использую операции ngResource для CRUD. Может ли кто-нибудь предложить, как отправить имя пользователя и пароль на сервер и получить ответ, чтобы проверить, действительны ли учетные данные. Мне нужна помощь в коде ngResource и mongoose. Благодарю.

Теги:
mean-stack
mongoose
angularjs-resource

1 ответ

0
Лучший ответ

Проверьте шаблон mid.js: https://github.com/meanjs/mean

Вы увидите, как они делают это довольно быстро:

moduleName.client.controller.js сделает http-вызов, используя введенный http. Ниже приведен пример вызова, выполненного из /modules/users/client/controllers/authentication.client.controller.js (с некоторыми изменениями в коде, чтобы было легче увидеть, что вы ищете):

AuthenticationController.$inject = ['$scope', '$state', '$http', 'Authentication'];

function AuthenticationController($scope, $state, $http, Authentication, ) {
  ...
  vm.authentication = Authentication;

  $http.post('/api/auth/signup', vm.credentials).success(function (response) {
    // If successful we assign the response to the global user model
    vm.authentication.user = response;

  }).error(function (response) {
    vm.error = response.message;
  });
}

Теперь этот вызов отправляется в '/api/auth/signup'. Файл, обрабатывающий этот маршрут, находится в /modules/users/server/routes/auth.server.routes.js:

modules.exports = function(app) {
  var users = require('../controllers/users.server.controller');
  ...
  app.route('/api/auth/signup').post(users.signup);
}

Как вы можете видеть, маршрут (URL) соответствует тому, который вы вызывали из клиентского контроллера. Поскольку этот вызов $ http от контроллера был $http.post(), запись маршрута должна совпадать. Вы можете видеть, что он делает это выше. Параметр users.signup переданный выше, ссылается на функцию в еще одном файле: /modules/users/server/controllers/users/users.authentication.server.controller.js. Это ваш основной контроллер для части аутентификации модуля users. Теперь в этом файле мы видим, что функция signup экспортируется:

/* note: there are global variables here, see below */
exports.signup = function (req, res) {
  // For security measurement we remove the roles from the req.body object
  delete req.body.roles;

  // Init user and add missing fields
  var user = new User(req.body);
  user.provider = 'local';
  user.displayName = user.firstName + ' ' + user.lastName;

  // Then save the user
  user.save(function (err) {
    if (err) {
      return res.status(400).send({
        message: errorHandler.getErrorMessage(err)
      });
    } else {
      // Remove sensitive data before login
      user.password = undefined;
      user.salt = undefined;

      req.login(user, function (err) {
        if (err) {
          res.status(400).send(err);
        } else {
          res.json(user);
        }
      });
   }
 });
};

Сейчас здесь много, но мы можем сломать его.

Переменная req является почтовым запросом, который передается через $ http. Переменная res - это ответ, который клиент ожидает получить обратно. Обратите внимание, что vm.credentials был передан в $http.post('/api/auth/signup/', vm.credentials)? Это связано с req.body и может быть доступно вашим контроллером сервера.

Таким образом, в этом примере req.body - это необходимые данные для создания нового пользователя на сервере. Это делается с использованием мангуста, который имеет схему "Пользователь". Получите доступ к этому, объявив глобальные вершины в верхней части вашего контроллера:

var mongoose = require('mongoose'),
  User = mongoose.model('User');

Вы можете видеть, что новый пользователь создается выше. Он сохраняется через вызов mongoose .save().

Наконец, ваши серверные функции должны отвечать на запрос клиента, используя переменную res переданную функции. Посмотрите, как как только пользователь будет создан успешно, вызовы функций

res.jsonp(user);

Это success() для клиента, который принимает ответ и связывает его с локальной переменной vm.authentication.user

Надеюсь это поможет!

  • 1
    Спасибо, мтро. Хотя это не решает проблему полностью, но это очень помогает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню