2017-06-13 1 views
6

Ich versuche Angular App über eckige CLI zu starten, aber es scheint, als ob die Standard app-root Komponente nicht geladen wird. Ich muss sagen, dass ich Proxy für die Verbindung zwischen eckigen App und Express-Server benutze, und ich zwei Skripte gleichzeitig laufen: node bin/www für Express/node.js Start und ng serve --proxy-config proxy.config.json für den Start Angular und Erstellen von Proxy-Verbindung, es sieht wie folgt aus (der Teil von package.json):Warum Angular 2 lädt nicht Standard-App-Root-Komponente?

"scripts": { 
    "start": "concurrently --kill-others \"node bin/www\" \"ng serve --proxy-config proxy.config.json\"" 
} 

die Index-Seite geladen in Ordnung, aber es scheint, dass app-root Komponente (die Standardkomponente, die aus Winkel CLI ng new erstellt wurde) Laden nicht: enter image description here Hier ist meine node.js/express use s und eine Route:

var express = require('express'); 
var router = express.Router(); 
var app = express(); 
var path = require('path'); 

app.use(express.static('./src/client/')); 
app.use(express.static('./')); 
app.use(express.static('./tmp')); 
app.use('/*', express.static(path.resolve('src/client/index.html'))); 

router.get('*', function(req, res) { 
    res.sendFile(path.resolve('src/client/index.html')); 
}); 

module.exports = router; 

Und die Struktur meines Projektes (falls erforderlich): enter image description here

Was habe ich verpasst? Warum lädt die Standardkomponente app-root nicht? (muss ich sagen, wenn ich ng serve ausführen, startet es die eckige Homepage nach Bedarf und die Komponente ist in Ordnung, so denke ich, das Problem ist irgendwo in Express).

Vielen Dank im Voraus

+0

Mit 'Ng Serve' und von Express dienen, sind duplicative. Trotzdem würden Sie aus dem Build-Ordner und nicht aus dem src-Ordner bedienen. –

+0

@ TaylorAckley, ich habe versucht, nur Express und Build-Ordner namens "dist" standardmäßig zu starten, aber immer noch das gleiche Problem (aber jetzt alle Skripte geladen sind). –

+0

@Ced, hier sind meine empfangen 'index.html': https://ibb.co/czJe2k, und meine Netzwerk-Registerkarte: https://ibb.co/hE3Jv5 –

Antwort

5

Sie sollten den Inhalt des Ordners dist/after calling ng build --prod (the --prod is important, as the default is --dev) dienen. So wäre es so etwas wie dieses:

"scripts": { 
    "start": "ng build --prod && node bin/www" 
} 

Und mehr oder weniger Ihr ausdrückliches Skript anpassen:

app.use(express.static('./dist')); 
app.use('/*', express.static(path.resolve('dist/index.html'))); 

router.get('*', function(req, res) { 
    res.sendFile(path.resolve('dist/index.html')); 
}); 
+0

Ihr Vorschlag sieht OK aus, aber ich habe versucht zu verwenden es und jetzt bekomme ich 404 Fehler. Vielleicht hast du irgendwo falsch geschrieben oder vergessen, etwas zu deiner Antwort hinzuzufügen? Ich fühle, dein Vorschlag ist sehr nah. Ich muss sagen, dass ich völlig neu in Node/Express bin. –

+0

Oh, ja, ich habe 'index.html' vergessen. Lass mich wissen ob es funktioniert. – acdcjunior

+0

Ich habe versucht, die index.html mit Skripts lädt, aber ich bekomme immer noch eine leere 'app-root' Element. Aber mein Build-Ergebnis ('dist'-Ordner) enthält nur' client/index.html' und fünf '... bundle.js'-Dateien. Alle sind in 'index.html' enthalten, aber wenn ich versuche, einen von ihnen in einem neuen Tab zu öffnen, sehe ich keinen Code wie erwartet. Scheint so, als wären sie nicht wirklich enthalten. Ich denke, das ist ein anderes Problem, aber wenn Sie darüber irgendwelche Gedanken haben, lassen Sie es mich wissen –