2016-03-22 13 views
2

Ich habe vor kurzem das Problem, dass ich nicht bekomme, wie die Pfade für HTML in Knoten js arbeiten. Ich verknüpfe die Skripte meiner index.html wie gewohnt - relativ zur Datei index.html (die Dateien node.js und index.html befinden sich im selben Verzeichnis "res.sendFile (__ dirname + '/index.html');"). Aber wenn ich es im Browser öffne, der mit dem Knoten js ausgeführt wird, zeigt es nur "cant GET blabla" für die Skripte an. Stattdessen öffnen Sie es, indem Sie einfach auf index.html ohne Knoten js klicken, diese Pfade funktionieren! Wie muss ich HTML-Pfade für Knoten js schreiben?Knoten JS - HTML-Pfade

var express = require('express'), 
    app = express(), 
    server = require('http').createServer(app), 
    io = require('socket.io').listen(server), 
    port = Number(process.env.PORT || 3000), 

server.listen(port); 

app.get('/', function(req, res){ 
    res.sendFile(__dirname + '/index.html'); 
}); 

Vielen Dank für Ihre Zeit! :)

+0

tatsächlich Dieser Code funktioniert auf meinem PC verwenden können. XD. vielleicht stimmt etwas mit den Berechtigungen nicht? – SCaffrey

Antwort

2

Blick auf diese:

app.get('/', function(req, res){ 
    res.sendFile(__dirname + '/index.html'); 
}); 

Sie Knoten gesagt haben: "Wenn der Browser für / fragt es geben index.html".

Was passiert, wenn der Browser nach someScript.js fragt?

Sie haben Node nicht gesagt, was Sie tun sollen.

(Sie werden wahrscheinlich eine Bibliothek zum Bereitstellen von statischen Dateien finden, anstatt sie einzeln einzeln zu bearbeiten).

+0

vielen dank und einen schönen tag! :) – dunnohowishouldnamemyself

0

Sie sollten Server statische Dateien Express konfigurieren, zum Beispiel, setzen alle statischen Dateien in einem Verzeichnis mit dem Namen 'public'

var express = require('express'); 
 
var app = express(); 
 
var path = require('path'); 
 

 
// viewed at http://localhost:8080 
 
app.get('/', function(req, res) { 
 
    res.sendFile(path.join(__dirname + '/index.html')); 
 
}); 
 

 
app.listen(8080);

ExpressJS to Deliver HTML Files

Render HTML file in ExpressJS

0

Wenn Sie schreiben:

app.get('/', function(req, res){ 
    res.sendFile(__dirname + '/index.html'); 
}); 

Es wird nur index.html-Datei dienen, nicht die anderen js-Skripte und Stylesheets, die Sie in Ihrem HTML hinzugefügt haben.

Es gibt zwei Möglichkeiten, das zu lösen:

Für beide, würde ich vorschlagen, ‚Pfad‘ Modul zu verwenden.

Lösung 1:

var path = require('path') 
app.get('/path/to/js/foo.js',function(req,res){ 
    res.sendFile(path.resolve(__dirname,'/path/to/js/foo.js') 
}) 
app.get('/path/to/css/bar.css',function(req,res){ 
    res.sendFile(path.resolve(__dirname,'/path/to/css/bar.css')) 
}) 

und so weiter für alle CSS- and.js Datei, die Sie in Ihrer index.html hinzugefügt haben.

Lösung 2:

Sie können ein öffentliches Verzeichnis in Ihrem Projekt der Root-Verzeichnis erstellen. Darin sind all Ihre img, css und js Dateien enthalten.

Als nächstes

var path = require('path') 
app.use(express.static('public')) 
app.get('/',function(req,res){ 
    res.sendFile(path.resolve(__dirname,'/index.html') 
}) 
0

Sie

app.use(express.static(path.join(__dirname, "folder-name")));