javascript - Understanding Express routing in conjunction with AngularJS (using mean.js boilerplate) -
i developing web application mean.js boilerplate code. added view application (the 'analysis' page) creating analysis module , added route logic following code.
//setting 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' }); } ]); this works dandy, can go homepage.com/image_analysis , see tools.client.view.html page.
my goal have page visible user logged in. first approach check if user logged in angular routes logic, has proven difficult me. read check authentication in front end unsafe. i've decided check if user logged in express routing.
here example of express routing looks 1 of other angularjs modules
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 binding project middleware app.param('projectid', projects.projectbyid); }; notice users.requireslogin function check if user logged in , redirects user signin page if not. want take advantage of function. things dont quite understand in boilerplate code what purpose of app.route()? think might middleware not sure does.
here attempts i've take taken @ messing around express routing. these attempts in analysis.server.routes.js file created.
attempt 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'); }); }; i thought log 'helloworld' when access image_analysis page, didnt appear anything.
attempt 2
module.exports = function(app) { var users = require('../../app/controllers/users.server.controller'); // analysis routes app.route('/image_analysis') .get(users.requireslogin); }; based on other code, thought might work require login analysis page. did nothing.
any appreciated! everyone, struggling grasp express routing @ moment , stackoverflow has been tremendous help.
i don't have solution, or not @ least @ moment think of. can explain how things work , why solution might not trivial.
what purpose of
app.route()
this defines routes.
app.route('/projects/:projectid') .get(users.requireslogin, projects.read) .put(users.requireslogin, projects.hasauthorization, projects.update) .delete(users.requireslogin, projects.hasauthorization, projects.delete); what code when client requests url 1 of following
get /projects/5562ff08de4f70180bba3083 put /projects/5562ff08de4f70180bba3083 delete /projects/5562ff08de4f70180bba3083 it first executes middleware function users.requireslogin, defined common in methods (.get .put .delete) , respective middlewares in order projects.read | projects.hasauthorization ...
on how angluar routing works in contrast express routing: angluar routing done client-side. it's achieved through javascript changing addressbar url , displaying view attached route.
your angular app served server through single (express) route - / (homepage)
so again, entire angular app loads thorough 1 route on server-side, , angular takes on routing client-side through it's own ui-router.
now must starting seem obvious it's not trivial have server-side authentication check interfere between client-side routing.
you can have server-side authentication work routes server in control of serving. api routes, in case.
attempt 1
app.get('/image_analysis', function(req, res) { console.log('helloworld');i thought log 'helloworld' when access image_analysis page, didnt appear anything.
it indeed should have! unless.. there's route comes before serves requests
app.get('*', function(req, res) { res.send(angularapp); // angular app served here }); // no request *need* go beyond past point // because got served above app.get('/image_analysis', function(req, res) { // isn't reached. console.log('helloworld'); }); so that's why doesn't work.
Comments
Post a Comment