Mean Stack - Как передать объект в контроллер - PullRequest
0 голосов
/ 19 марта 2019

Я хотел бы передать объект контроллеру в моем среднем приложении. Я не совсем уверен, как это сделать. Я использую промежуточное программное обеспечение, чтобы проверить, является ли пользователь администратором. Но нужно получить текущего пользователя в контроллере. В настоящее время я использую Parse, чтобы получить вошедшего в систему пользователя, но он постоянно возвращает ноль и иногда возвращает учетную запись администратора. (Не надежно)

Маршрутизатор

  const express = require('express')
const admin = require('../middlewares/admin')

const router = express.Router()


router.get('/', (req, res) => {
  if (req.session.isAdmin){
    res.redirect(req.baseUrl + '/places')
  } else {
    res.redirect(req.baseUrl + '/userplaces')
  }  
})

router.get('/userplaces', (req, res) => {
  res.render('userplaces', req.session.user)
})

router.get('/places', admin, (req, res) => {
  res.render('places')
})

Контроллер (ЭТО ТАМ, ГДЕ НУЖНО ИСПОЛЬЗОВАТЬ ОБЪЕКТ ПОЛЬЗОВАТЕЛЯ)

'use strict';

angular.module('app')
  .controller('UserPlaceCtrl',
    function ($scope, $mdDialog, Toast, $translate, Place, Category, Auth) {

      // Pagination options
      $scope.rowOptions = [5, 25, 50];

      $scope.query = {
        canonical: '',
        limit: 5,
        page: 1,
        total: 0,
        isFeatured: null,
        status: null,
        category: null,
        date: null,
        user : Auth.getLoggedUser() // user user object here 
      };

Auth Service (в настоящее время используется анализ, но не дает желаемых результатов)

    angular.module('app').factory('Auth', function ($q) {

      var mSessionToken = null;

      return {

        getLoggedUser: function () {
          return Parse.User.current();
        },
}
}

ИЛИ Это можно сделать здесь, в сервисе place, и создать метод под названием userplaces.

angular.module('app').factory('Place', function ($q, moment) {

    var Place = Parse.Object.extend('Place', {
        initialize: function () {
            this.images = [];
        }
    }, {

            getInstance: function () {
                return this;
            },

            save: function (obj) {
                return obj.save();
            },

            delete: function (obj) {
                return obj.destroy();
            },
//create new method instead of all and add user query param
            all: function (params) {

                var query = new Parse.Query(this);

                if (params.canonical != '') {
                    query.contains('canonical', params.canonical);
                }

                if (params.category && params.category !== null) {
                    query.equalTo('category', params.category);
                }

                if (params.date && params.date !== null) {
                    var start = moment(params.date).startOf('day');
                    var end = moment(params.date).endOf('day');
                    query.greaterThanOrEqualTo('createdAt', start.toDate());
                    query.lessThanOrEqualTo('createdAt', end.toDate());
                }

                if (params.status && params.status !== null) {
                    query.equalTo('status', params.status);
                }

                if (params.isFeatured && params.isFeatured !== null) {
                    query.equalTo('isFeatured', params.isFeatured);
                }

                if (params.user) {
                    query.equalTo('user', params.user);
                }

                query.include('category')
                query.descending('createdAt');

                if (params && params.limit) {
                    query.limit(params.limit);
                }

                if (params && params.limit && params.page) {
                    query.skip((params.page * params.limit) - params.limit);
                }

                return query.find();
            },

Внутри Server.js

app.use((req, res, next) => {
  res.locals.user = req.session.user
  res.locals.isAdmin = req.session.isAdmin
  res.locals.page = req.url.split('/').pop()
  res.locals.appId = process.env.APP_ID
  res.locals.appName = process.env.APP_NAME
  res.locals.serverUrl = process.env.PUBLIC_SERVER_URL
  res.locals.googleMapsApiKey = process.env.GOOGLE_MAPS_API_KEY
  next()
})
...