Angular-routing in HTML5mode mit Node.js

Ich weiß, es gibt andere Antworten auf diese, aber Sie scheinen Vorbehalte.

Diese Ursachen eine Umleitung, die tödlich sein können für mein front-end-app, die benutzt Mixpanel, und eine Doppel-Belastung von Mixpanel wird ein Maximum Call Stack Size Exceeded Fehler im browser.

Diese verwendet man sendFile , die ich persönlich nicht bekommen, um zu arbeiten. Versuchen, zu diagnostizieren, bin ich nur empfohlen, um express.static().

Derzeit mein code sieht wie folgt aus:

home.js - Einige Routen, die Letzte soll die front-end Website.

var indexPath = path.resolve( __dirname, '../' + process.env.PUBLIC_FOLDER )

router.get( '/:user/:stream/:slug', function( req, res, next ) {

    if ( req.headers['user-agent'].indexOf( 'facebook' ) != -1 ) {
        //stuff to handle the Facebook crawler
    } else return next()
})

router.get( '/*', function( req, res ) {
    express.static( indexPath )
})

server.js - Konfiguration node/express

app = express();

app 
    .use( morgan( 'dev' ) )
    .use(bodyParser.urlencoded( { limit: '50mb', extended: true } ) )
    .use( bodyParser.json( { limit: '50mb' } ) )
    .use( '/api', require('./routes/usersRoute.js') )
    .use( '/', require( './routes/home' ) )
    .on( 'error', function( error ){
       console.log( "Error: " + hostNames[i] + "\n" + error.message )
       console.log( error.stack )
    })

http
    .createServer( app ).listen( process.env.PORT )
    .on( 'error', function( error ){
       console.log( "Error: " + hostNames[i] + "\n" + error.message )
       console.log( error.stack )
    })

Paar mehr Infos

Der Grund, warum Sie sehen können, bin ich versucht zu verwenden express.static() ist, weil wenn ich res.sendfile() ich ein problem wie diese, wo die Konsole sagt Unexpected token '<'. Leider ist die Antwort nicht die genaue Korrektur, und auch nicht der Fragesteller, die sagt, Sie das problem gelöst hat, aber nicht teilen eine Antwort.

In meiner trial-and-error habe ich Hinzugefügt einige mehr, um auszudrücken, wie dies

.use( '/app/app.js', express.static( indexPath + '/app/app.js' ) )
.use( '/app/views', express.static( indexPath + '/app/views' ) )
.use( '/app/controllers', express.static( indexPath + '/app/views' ) )
.use( '/app/directives', express.static( indexPath + '/app/views' ) )
.use( '/app/vendor', express.static( indexPath + '/app/vendor' ) )
.use( '/js', express.static( indexPath + '/js' ) )
.use( '/css', express.static( indexPath + '/css' ) )
.use( '/fonts', express.static( indexPath + '/fonts' ) )
.use( '/images', express.static( indexPath + '/images' ) )
.use( '/api', require('./routes/usersRoute.js') )
.all( '/*', require( './routes/home' ) )

Und in meinem home.js Routen-Dateien Hinzugefügt, das

router.get( '/*', function ( req, res ) {
    res.status( 200 ).set( { 'content-type': 'text/html; charset=utf-8' } )
    .sendfile( indexPath + '/index.html' )
})

Und im browser sehe ich alle meine Dateien laden, aber mit der < oben genannten Fehler. Ich sehe das /*/ route genannt wird, Hunderte Male, wenn ich einen refresh, so dass ich denke, dass die .use( '...', ... ) Konfigurationen werden ignoriert.


Hier ist ein weiteres Beispiel, beantragt von Jonas unten.

var indexPath = path.resolve( __dirname, process.env.PUBLIC_FOLDER )

mongoose.connect( process.env.MONGOLAB_URI )

app = express();

app 
    .use( morgan( 'dev' ) )
    .use(bodyParser.urlencoded( { limit: '50mb', extended: true } ) )
    .use( bodyParser.json( { limit: '50mb' } ) )
    .use( '/api', require('./routes/usersRoute.js') )
    .use( '/', require( './routes/home.js' ) )
    .use( express.static( indexPath ) )
    .on( 'error', function( error ){
       console.log( "Error: " + hostNames[i] + "\n" + error.message )
       console.log( error.stack )
    })

Ich habe auch das gleiche getan, ohne die .use( '/', require( './routes/home.js' ) ) Linie, um zu versuchen, einzugrenzen, jedes problem, aber es ist das gleiche Ergebnis. Wird die Seite geladen, wenn ich die # in der URL, aber der browser wird entfernen Sie die # (soweit so gut). Aber wenn ich drücken Sie auf refresh, oder setzen Sie die URL manuell, sans-hashbang, es gibt einen Fehler wie Cannot GET /home/splash, wo /home/splash ist welchen Weg ich gehe.

  • Wie füge ich ein Kopfgeld auf diese? Es ist schon seit 4 Tagen...
  • Ich bin kein Experte mit express, aber ich habe noch nie jemand schief gehen, wenn Sie die folgenden Proben in der UI-Router-FAQ, die zeigt, mit app.all eher als router.get.
  • Haben Sie überprüft, die Pfade übergeben express.static gültig sind? Was ist der Wert von indexPath?
  • machen Sie einfach var app = express(); app.configure(function() { ... app.use(express.static(__dirname + '/public')); ... }
  • Ich glaube nicht, dass app.konfigurieren ist Teil express 4.
  • Lol natürlich ist es als optional, aber immer noch. expressjs.com/api.html#app.configure

InformationsquelleAutor Noah | 2015-07-09
Schreibe einen Kommentar