Я хотел бы передать объект контроллеру в моем среднем приложении. Я не совсем уверен, как это сделать. Я использую промежуточное программное обеспечение, чтобы проверить, является ли пользователь администратором. Но нужно получить текущего пользователя в контроллере. В настоящее время я использую 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()
})