2016-05-22 15 views
2

Ich baue eine App in angularjs mit verschiedenen Zuständen und habe eine $urlRouterProvider.otherwise("/"); hinzugefügt, um Leute umzuleiten, sind sie nicht zu einem Zustand gehen, die ich eingerichtet habe.AngularJS - Redirect wenn URL nicht korrekt ist

Obwohl ich ein Problem habe, wenn sie auf eine URL jenseits der von mir eingerichteten URL gehen. So zum Beispiel der folgende Zustand ist Profil:

.state('profile', { 
     url: '/profile', 
     templateUrl: 'partials/profile.html', 
     controller: 'profileCtrl', 
     data: { 
      requiresLogin: true 
     }, 
     resolve: { 
      $title: function() { return 'Profile'; } 
     } 
    }); 

Lets sagen, dass ich mit/prof statt/profile zu einer URL gehen war, werde ich eine Umleitung erhalten zu aka Hause ("/").

Hier ist, wo das Problem auftaucht: Wenn ich auf eine URL gehen würde wie folgt:/profile/Test, ich eine Menge Fehler in meiner Konsole (Bild unten)

error log

bekommen zusätzliche Informationen (von Kommentaren):

ich werde auch den Server-seitigen Code zu sehen gebe das Problem dort mit einer Umleitung sein könnte:

// Init Express Web Framework 
var express = require('express'); 
var app = express(); 
var path = require('path'); 

// Set view engine to EJS & set views directory 
app.set('view engine', 'ejs'); 
app.set('views', path.resolve(__dirname, 'client', 'views')); 

app.use(express.static(path.resolve(__dirname, 'client'))); 

// Database Connection 
var mongoose = require('mongoose'); 
var configDB = require('./server/config/database.js'); 
mongoose.connect(configDB.url); 

var bodyParser = require('body-parser'); 
app.use(bodyParser.json()); 

// Main route 
app.get('/', function(req, res){ 
    res.render('index.ejs'); 
}); 

// API 
var api = express.Router(); 
require('./server/routes/capture')(api); 
app.use('/api', api); 

// Set routes to other pages 
app.get('/*', function(req, res){ 
    res.render('index.ejs'); 
}); 

// Port Settings 
app.listen(process.env.PORT || 3000, process.env.IP); 
console.log('Listening on port ' + process.env.PORT); 

und hier ist mein Arbeitsplatz

workspace

Umleiten von URLs, die erhalten umgeleitet nicht aufgeführt sind. URLs, die aufgelistet sind (zum Beispiel/dashboard,/profile, ...) wenn sie etwas zum Link hinzufügen, werden sie nicht umgeleitet. Ich habe diese Fehler gefunden, wenn ich den Controller nicht zum Haupt-HTML hinzugefügt habe, aber das ist genau das Richtige. Ich möchte nicht in der Lage sein, zu diesen Links zu surfen. Alle Links, die nicht in app.js angegeben wurden, sollten umgeleitet werden.

Gibt es eine Möglichkeit, das zu beheben?

EDIT - Added 404:

ich einen Haken 404 in meinem server.js mit diesem Code hinzugefügt:

// catch 404 and forwarding to error handler 
app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

Dies ist das Ergebnis: usualy

Error: Not Found 
    at /home/ubuntu/workspace/server.js:31:15 
    at Layer.handle [as handle_request] (/home/ubuntu/workspace/node_modules/express/lib/router/layer.js:95:5) 
    at trim_prefix (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:312:13) 
    at /home/ubuntu/workspace/node_modules/express/lib/router/index.js:280:7 
    at Function.process_params (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:330:12) 
    at next (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:271:10) 
    at jsonParser (/home/ubuntu/workspace/node_modules/body-parser/lib/types/json.js:100:40) 
    at Layer.handle [as handle_request] (/home/ubuntu/workspace/node_modules/express/lib/router/layer.js:95:5) 
    at trim_prefix (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:312:13) 
    at /home/ubuntu/workspace/node_modules/express/lib/router/index.js:280:7 
    at Function.process_params (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:330:12) 
    at next (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:271:10) 
    at SendStream.error (/home/ubuntu/workspace/node_modules/express/node_modules/serve-static/index.js:120:7) 
    at emitOne (events.js:77:13) 
    at SendStream.emit (events.js:169:7) 
    at SendStream.error (/home/ubuntu/workspace/node_modules/express/node_modules/send/index.js:245:17) 
+0

Könnten Sie machen ein Plunkr den Fehler reproduzieren? –

+1

Es wäre nicht wirklich sinnvoll, einen ganzen Plnnr-Code zu erstellen, um dies zu reproduzieren, da es einfach ist. Umleitende URLs, die nicht aufgelistet sind, werden umgeleitet. URLs, die aufgelistet sind (zum Beispiel/dashboard,/profile, ...) wenn sie etwas zum Link hinzufügen, werden sie nicht umgeleitet. Ich habe diese Fehler gefunden, wenn ich den Controller nicht zum Haupt-HTML hinzugefügt habe, aber das ist genau das Richtige. Ich möchte nicht in der Lage sein, zu diesen Links zu surfen. Alle Links, die nicht in app.js angegeben wurden, sollten umgeleitet werden. –

+0

Unexpected Token "<", sind Sie sicher, dass Sie kein abschließendes "<" irgendwo haben? – Walfrat

Antwort

0

Unexpected token "<" bedeutet HTML-Inhalt anstelle von js.
angular is not defined bedeutet, dass Ihre angular.js sogar nicht geladen werden muss.

Überprüfen Sie Ihren Server und Network Registerkarte im Browser.
Welche URLs laden Ihre js-Skripte?
Welcher Antwort-Browser bekommt diese URLs?

Fix js URLs zu korrigieren und Fehler werden weg.

Sie können auch falsch mit Ihrem .htaccess sein.
Überprüfen Sie, ob vorhandene statische Dateien nicht umgeleitet wurden.
Es ist -f Flag in der RewriteRule Direktive.


Ich nehme einen Blick auf Ihre Bug-Animation :)

Ihre Skripte werden als src="lib/angular.js" definiert.
Diese URLs sind relativ und auf /profile Seite wird /profile/lib/... sein.

Was Sie brauchen, ist absolute Urls: src="/lib/angular.js"

+0

Alle Skripts im Dokument sind ordnungsgemäß definiert. Ich kann immer noch zu den richtigen URLs gehen (wenn in app.js angegeben). Ich bekomme auch eine Umleitung für Seiten, die nicht existieren. Die Weiterleitung gilt nicht, wenn ich den angegebenen Links etwas hinzufüge. Ich habe nach .htaccess gesucht und sie geben an, dass dies hinzugefügt werden muss, wenn ich '$ locationProvider.html5Mode ({enabled: true, requireBase: false}) hinzufüge; 'Zu meinem Code, um die URL sauber aussehen zu lassen, ist das das Problem? –

+0

Öffnen Sie einfach die Registerkarte Netzwerk und sehen Sie, dass Ihre Skripte als 'text/html' geladen werden. Überprüfen Sie URLs von ihnen, versuchen Sie, in einem neuen Tab zu öffnen. Sie haben offensichtlich falsche URLs.Vielleicht ist es ein relatives Zeug wie 'src =" scripts/angular.js "', das auf der Seite "/ reports" in "http: // localhost/reports/scripts/angular.js" aufgelöst wird. –

+0

Ihr Winkel ist in diesem Moment nicht einmal geladen. Es hat nichts mit diesem Problem zu tun. –