2015-05-29 2 views
0

Я разрабатываю веб-приложение со стандартным шаблоном mean.js. Недавно я добавил представление к моему приложению (страница «анализ»), создав модуль анализа и добавив некоторую логику маршрута со следующим кодом.Понимание экспресс-маршрутизации в сочетании с AngularJS (с использованием шаблона mean.js)

//Setting up route 
angular.module('analysis').config(['$stateProvider', 
    function($stateProvider) { 
     // Projects state routing 
     $stateProvider. 
     state('imageAnalysis', { 
      url: '/image_analysis', 
      templateUrl: 'modules/analysis/views/tools.client.view.html' 
     }); 
    } 
]); 

Это работает только денди, я могу пойти в homepage.com/image_analysis и увидеть мою страницу tools.client.view.html.
Моя цель теперь состоит в том, чтобы эта страница была видимой только для пользователей, которые вошли в систему. Мой первый подход к этому состоял в том, чтобы проверить, был ли пользователь зарегистрирован в логике угловых маршрутов, это оказалось для меня трудным. Я также читал, что проверка подлинности в интерфейсе очень опасна. Поэтому я решил проверить, зарегистрирован ли пользователь в режиме экспресс-маршрутизации.
Вот пример того, что маршрутизация Экспресс выглядит как один из моих других AngularJS модулей

module.exports = function(app) { 
    var users = require('../../app/controllers/users.server.controller'); 
    var projects = require('../../app/controllers/projects.server.controller'); 

    // Projects Routes 
    app.route('/projects') 
     .get(users.requiresLogin, projects.list) 
     .post(users.requiresLogin, projects.create); 

    app.route('/projects/:projectId') 
     .get(users.requiresLogin, projects.read) 
     .put(users.requiresLogin, projects.hasAuthorization, projects.update) 
     .delete(users.requiresLogin, projects.hasAuthorization, projects.delete); 

    // Finish by binding the Project middleware 
    app.param('projectId', projects.projectByID); 
}; 

Уведомление функция users.requiresLogin, которая проверяет, если пользователь вошел в систему и перенаправляет пользователя на страницу входа, если они не. Я хочу воспользоваться этой функцией. Некоторые вещи, которые я не совсем понимаю в шаблоне, являются . Какова цель app.route()? Я думаю, что это может быть промежуточное ПО, но я не уверен, что он делает.

Вот несколько попыток, которые я предпринял в беспорядке с экспресс-маршрутизацией. Эти попытки находятся в моем файле analysis.server.routes.js, который я создал.
Покушение 1

module.exports = function(app) { 
    var users = require('../../app/controllers/users.server.controller'); 

    // analysis routes 
    app.get('/image_analysis', function(req, res) { 
     console.log('helloworld'); 
     console.log('helloworld'); 
     console.log('helloworld'); 
     console.log('helloworld'); 
     console.log('helloworld'); 
     console.log('helloworld'); 

    }); 
}; 

Я подумал, что это журнал «HelloWorld», когда я получить доступ к странице image_analysis, но оно не появляется, чтобы сделать что-нибудь.
Покушение 2

module.exports = function(app) { 
    var users = require('../../app/controllers/users.server.controller'); 

    // analysis routes 
    app.route('/image_analysis') 
     .get(users.requiresLogin); 
}; 

Основываясь на другом коде, я думал, что это может работать, чтобы потребовать входа для страницы анализа. Но он ничего не сделал.

Любая помощь была бы высоко оценена! Спасибо всем, я изо всех сил пытаюсь понять экспресс-маршрутизацию в настоящий момент, и stackoverflow оказал огромную помощь.

ответ

1

У меня нет решения или нет, по крайней мере, в этот момент, о котором я мог думать. Однако я могу объяснить вам, как все работает, и почему решение не может быть тривиальным.


что цель app.route()

Это определяет ваши маршруты.

app.route('/projects/:projectId') 
    .get(users.requiresLogin, projects.read) 
    .put(users.requiresLogin, projects.hasAuthorization, projects.update) 
    .delete(users.requiresLogin, projects.hasAuthorization, projects.delete); 

Что этот код делает, когда клиент запрашивает URL, как один из следующих

GET /projects/5562ff08de4f70180bba3083 
PUT /projects/5562ff08de4f70180bba3083 
DELETE /projects/5562ff08de4f70180bba3083 

это первый выполняет эту функцию users.requiresLogin промежуточного слоя, , которая определяется как общее во всех методах (.get.put.delete) и затем их соответствующие сетевые работники в этом порядке projects.read | projects.hasAuthorization ...

О том, как Angluar routing работает в отличие от экспресс-маршрутизации: Маршрутизация Angluar выполняется на стороне клиента. Все это достигается с помощью Javascript , изменяющего URL-адрес адресной строки и отображающий вид, прикрепленный к этому маршруту.

Ваше Угловая приложение обслуживается сервером через один (Express) маршрут - / (домашней страницы)

Так опять же, вся ваша Угловая приложение загружает кап только один маршрут на стороне сервера, и затем Угловое берет на себя маршрутизацию на клиентскую сторону через свой собственный ui-router.

Теперь должно показаться очевидным, что нет необходимости проверять подлинность на стороне сервера между клиентской маршрутизацией.

У вас может быть только аутентификация на стороне сервера с маршрутами, на которых сервер фактически контролирует обслуживание. В основном это ваши маршруты API.


Покушение 1

app.get('/image_analysis', function(req, res) { 
    console.log('helloworld'); 

Я подумал, что это журнал 'HelloWorld', когда я получить доступ к странице image_analysis, но оно не появляется, чтобы сделать что-нибудь.

Это действительно должно быть! Если не существует ... есть маршрут, который предшествует ему, который уже обслуживает все запросы

app.get('*', function(req, res) { 
    res.send(angularApp); // your angular app is served here 
}); 

// No request would *need* to go beyond past this point 
// because it already got served above 

app.get('/image_analysis', function(req, res) { 
    // so this isn't reached. 
    console.log('helloworld'); 
}); 

Так вот почему это не работает.

+0

Благодарим за отзыв. Я не вижу ничего такого, что выглядит в моем коде 'app.get ('*', function (req, res) { res.send (angularApp); // ваше угловое приложение подается здесь });' –

+0

@ Даниэль Якобсон, я вижу. Вы используете этот [стандартный шаблон] (https://github.com/meanjs/mean)? И вы сохранили свой 'analysis.server.routes.js' в'/app/routes/'? Он * должен * работать тогда ... – laggingreflex

+0

Да. Im в настоящее время пытается создать фабрику углового обслуживания для доступа к экспресс-маршрутам, но theres нет данных, которые я хочу опубликовать или получить, я просто хочу выразить консольный журнал –

Смежные вопросы