7

I want to access the localhost:3000/admin which is in my views .. the index.html and the admin.html are my two different base files one is for users and the other is for admin dashboard respectively

in my app.routes.js I have this

 angular.module('appRoutes', ['ngRoute'])
.config(function($routeProvider, $locationProvider) {

$routeProvider

    .when('/', {
        templateUrl: 'app/views/pages/home.html',
        controller: 'MainController',
        controllerAs: 'main'
    })
    .when('/admin', {
        templateUrl: 'app/views/admin.html',
    })
    .when('/logout', {
        templateUrl: 'app/views/pages/home.html'
    })
    .when('/login', {
        templateUrl: 'app/views/pages/login.html'
    })
    .when('/signup', {
        templateUrl: 'app/views/pages/signup.html'
    })
    .when('/admin/login' ,{
        templateUrl: 'app/views/pages/adminlogin.html'
    })

    $locationProvider.html5Mode(true);
   })

in server.js I have this

app.get('*', function(req, res){
res.sendFile(__dirname + '/public/app/views/index.html');
});

there are two html index files: index.html, admin.html i want to open admin.html when the url is: localhost:3000/admin

and index.html when the url is: localhost:3000

screenshot of the app structure

in views/pages I have all the html pages required by index.html and admin.html using ng-view

5
  • Please state what you're asking about, as currently it's not clear what is the problem. Commented Jun 6, 2016 at 22:48
  • Possible hint for you: stackoverflow.com/questions/24927784/… Commented Jun 6, 2016 at 22:49
  • stackoverflow.com/questions/16906231/… Commented Jun 6, 2016 at 22:49
  • @DmitriyKhudorozhkov i want to access localhost:3000/admin.. localhost:3000 is just working fine , it is rendering index.html file Commented Jun 6, 2016 at 22:50
  • Consider reading this; 1st answer contains the answer to your question. Commented Jun 6, 2016 at 23:00

2 Answers 2

5

As I understand your question, you would want to just add one more routing rule to express. Express uses the first route that matches, so order is important here.

app.get('/admin/*', function(req, res){
    res.sendFile(__dirname + '/public/app/views/admin.html');
});

app.get('*', function(req, res){
    res.sendFile(__dirname + '/public/app/views/index.html');
});

The angular docs state about html5mode that you should rewrite all your urls to a single app entry point: Using this mode requires URL rewriting on server side, basically you have to rewrite all your links to entry point of your application (e.g. index.html). https://docs.angularjs.org/guide/$location#server-side

So to be clear: What I suggest is that you create server-routes for two separate apps. Nothing prevents you from using the first app one more time on another route, but I would advice against it. Separate anything with real power over your backend from the public app. I.e. remove /admin/login and /admin from your ng-routes and simply create a separate app for that.

Sign up to request clarification or add additional context in comments.

3 Comments

thanks.. now it is rendering admin.html by localhost:3000/admin and now what you are suggesting me is that i have to create 2 ng-app i.e one for index.html and the other for admin.html ??
That's how I would do it. Dependency injection in angular makes it so easy to reuse stuff, so it's basically just another angular.module(...
can you provide me with a working example? I'm still having some issues. thanks in advance.
0

I found a better solution for this..

app.get('*', function(req, res){
if (req.url.match('^\/admin')) {
    res.sendFile(__dirname + '/public/app/views/admin.html');
} else {
    res.sendFile(__dirname + '/public/app/views/index.html');
}
});

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.