2017-03-18 4 views
2

Ich versuche, eine grundlegende MEAN App zu laufen. Meine App funktioniert ohne den Angular-Teil. Aber wenn ich Angular einschließe, kann ich die HTML-Seite nicht sehen, die im "Ansicht" -Ordner ist.Kann meine HTML-Datei in Sicht nicht sehen

Das ist mein Server:

var express=require('express'); 
var path=require('path'); 
var bodyParser=require('body-parser'); 

var index=require('./routes/index'); 
var tasks=require('./routes/tasks'); 
var port=3000; 
var app=express(); 

/*View engine*/ 
app.set('views',path.join(__dirname, 'views')); 
app.set('view engine','ejs'); 
app.engine('html',require('ejs').renderFile); 

/*View static folder*/ 
app.use(express.static(path.join(__dirname, 'client'))); 

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({extended: false})); 

app.use('/',index); 
app.use('/api',tasks); 
app.listen(port, function(){ 
    console.log('The application is running on port '+port); 
}); 

Das ist mein Weg unter "Routen" Verzeichnis-Index:

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

router.get('/',function(req, res, next){ 
    res.render('index.html'); 
}) 
module.exports=router; 

Mein Angular-Code wird in Client/app Verzeichnis lebt. Ich tippe npm start, wenn ich in meinem myapp/client-Verzeichnis im Terminal bin. Ich bekomme "Kann nicht bekommen /" und im Terminal sehe ich "404 GET /index.html"

Irgendwelche Ideen?

Antwort

3

Das bedeutet, dass, wenn Sie öffnen root Route (/ uri) wird es index.html Datei machen:

router.get('/',function(req, res, next){ 
    res.render('index.html'); 
}); 

Und das bedeutet, dass Ihre Anzeigen von Dateien (in Ihrer Frage index.html-Datei) in views Ordnern sind:

app.set('views',path.join(__dirname, 'views')); 

Wenn Sie wollen index.html von EJS gerendert werden gelegt, so index.html Datei in views Ordner (nicht zu client Ordner).

und öffnen Sie Ihre App direkt: http://localhost:3000/


P. S. wenn Sie möchten index.html wie diese öffnen: http://localhost:3000/index.html

Sie wie folgt:

stellen Sie sicher, Ihre routes/index.js diesen Inhalt hat:

const 
    express = require('express'), 
    router = express.Router(); 

const renderViewFile = (filename) => (req, res) => res.render(filename); 

router.get('/', renderViewFile('index.html')); 
router.get('/index.html', renderViewFile('index.html')); 

module.exports = router; 

oder: put index.html file into client folder and it will be served as static file

+0

Meine index.html ist unter myapp \ views \ und nicht in myapp \ views \ client und es ist immer noch nicht funktioniert :( –

+0

@TuviaKhusid ok, so fügen Sie zusätzliche Route zu dienen '/ index.html' in der Tat Protokolle sagen, dass Sie versucht haben, auf die Datei zuzugreifen aus durchsuchen r wie folgt: 'http: // localhost: 3000/index.html' das wird natürlich nicht zugänglich sein, denn route '/ index.html' wird von expressjs router wie üblich route behandelt und natürlich wird da nicht erreichbar sein von statischen Middleware sieht 'Client'-Ordner – num8er

+0

@TuviaKhusid überprüfen Sie meine letzte aktualisierte Antwort, hoffe, dass es Ihren Bedürfnissen entspricht – num8er

Verwandte Themen