2017-01-25 4 views
1

Ich beginne von diesem ausgezeichneten Tutorial: https://www.fullstackreact.com/articles/using-create-react-app-with-a-server/ und versuchen, es durch Hinzufügen einer neuen Seite zu erweitern, um durch eine neue Route zu dienen. Doch nach Stunden herumschlagen ich zu realisieren, dass irgendwie schaffen reagieren-App einige seltsame Magie tut (wie mentioned in their docs here):Webpack irgendwie umgeht Express-Routing vollständig

`create-react-app` configures a Webpack development server to run on `localhost:3000`. 

This development server will bundle all static assets located under `client/src/`. 

All requests to `localhost:3000` will serve `client/index.html` which will include Webpack's `bundle.js`. 

Der Schlüssel Zitat ist „Alle Anfragen an localhost:3000client/index.html dienen“. Ich habe keine Ahnung, wie das passiert. Also auch wenn ich mess around mit routes/index.js:

app.route('/') 
     .get(function (req, res) { 
      res.sendFile(bipath.join(__dirname, '../public', 'THISCANBEANYRANDOMFILENAME.html')) 
     }); 

spielt es keine Rolle, weil webpack irgendwie localhost:3000 leitet sowieso index.html. Wo und wie macht es das? Unterm Strich Ich versuche, meine Routen zu ändern, um eine neue HTML-Datei zu dienen und in alle möglichen Filepath Fragen leite (ja, auch wenn ich require('path') oder sendFile(...,{root: __dirname}).)

Was genau ist hier los und Sie können Gib mir irgendwelche Hinweise, um mir zu helfen?

Edit: das könnte sowohl von babel als auch von webpack sein - ich weiß nicht genau wo Babel die Hände abhebt und wo das Webpack startet.

this is my problem in one picture

+0

Hier sind die Dateien auf github, wenn Sie weitere Informationen benötigen: https://github.com/sw-yx/fcc-nightlife – swyx

+0

Alle Babel tut ist transpile. Ich verstehe nicht, warum du denkst, dass das Erreichen des Root-Endpunkts nicht den Pfad erreicht - das ist die 'index.html', von der wir reden, oder? –

+0

ja. Ich kann mir selbst beweisen, dass der Root-Endpunkt nicht auf den Pfad trifft, weil ich absichtlich das sendFile bearbeitet habe, um eine nicht existierende Datei zu senden - "indextest.html" im obigen Screenshot, und wenn ich es in meinem Browser anklicke, diente es INDEX.HTML . So wurde es eindeutig irgendwo vom Webpack-Dev-Server abgefangen. Was ist schwarze Magie? Ich sehe nirgendwo einen Webpack-Dev-Server-Konfigurator (ich habe den GitHub gepostet), also habe ich keine Ahnung, wie es dieses Abfangen macht. – swyx

Antwort

2

Ich habe um nicht gespielt mit create-reagieren-app, aber es scheint, wie stattdessen den Standard-npm Start zu verwenden, können Sie Ihre eigene Server-Datei erstellen und auszuführen.

Das sieht wie ein gutes Beispiel aus.

https://medium.com/@patriciolpezjuri/using-create-react-app-with-react-router-express-js-8fa658bf892d#.6y4rrl61q

Alternativ, wenn Sie suchen Routen als api verwendet haben, könnten Sie Proxy sie an einen anderen Port wie verknüpft in dem Tutorial gezeigt.

+0

ja die APIs funktionieren perfekt. Das Tutorial zeigt Ihnen, wie Sie einen API-Server und einen Client-Server dualbooten. Also ist es der Client-Server, mit dem ich ein Problem habe: Die HTML-Portion ist im Grunde schwarze Magie, weil sie irgendwie routes/index.js nicht respektiert und ich habe keine Ahnung warum! – swyx

+0

Wenn Sie npm starten, startet das Standard-Script für die Ausführung von create-react-app einen Webpack-Dev-Server, der alle Anfragen abfängt. Sie können dies umgehen, indem Sie nicht das Standard-Skript ausführen und stattdessen Ihre eigene server.js schreiben, die den Start des Nicht-API-Servers übernimmt. nicht sicher, ob es eine sauberere Lösung in create-react-app – Jon

+0

Dank für Ihre Antworten bisher @Jon ist. Ich denke, dass ich mein eigenes Laufskript schreiben muss.Was ich nicht verstehe ist, dass ich anscheinend keine Webpack-Module in meinem node_modules-Ordner habe. Ich kann auch nicht die 'webpack.config.js'-Datei finden, die benötigt würde, um diese Anfragen abzufangen. In meinem Paket.json (https://github.com/sw-yx/fcc-nightlife/blob/master/package.json) benutzt das Tutorial 'babel-node', um den Server und den Client zu starten und wieder habe ich keine Idee, wo 'Babel-Node' sogar herkommt. so viele Geheimnisse. – swyx

Verwandte Themen