2015-06-29 10 views
6

Ich versuche, einen sehr einfachen Server auf meinem Mac zu starten, damit ich auf eine Datei von localhost zugreifen kann.Fehler beim Ausführen express mit Knoten

Ich habe Node und Express installiert und das ist alles, was es in meiner Server-Datei ist.

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

app.use(express.static(__dirname, '/')); 

app.listen(8080); 

console.log("App listening on port 8080"); 

Wenn ich versuche zu tun:

node server 

ich dies als eine Antwort:

/Users/mt_slasher/node_modules/express/node_modules/serve-static/index.js:47 
var opts = Object.create(options || null) 
       ^
TypeError: Object prototype may only be an Object or null:/
    at Function.create (native) 
    at Function.serveStatic (/Users/mt_slasher/node_modules/express/node_modules/serve-static/index.js:47:21) 
    at Object.<anonymous> (/Users/mt_slasher/Desktop/My Projects/Basket/Site/server.js:4:23) 
    at Module._compile (module.js:460:26) 
    at Object.Module._extensions..js (module.js:478:10) 
    at Module.load (module.js:355:32) 
    at Function.Module._load (module.js:310:12) 
    at Function.Module.runMain (module.js:501:10) 
    at startup (node.js:129:16) 
    at node.js:814:3 

Ich habe diese gleiche Datei auf einem Windows-Rechner mit den gleichen Dateien laufen und hatte kein Problem.

Nach einigem Graben fand ich diese Linie der Hauptschuldige zu sein scheint:

app.use(express.static(__dirname, '/')); 

Kann mir jemand sagen, was passiert sein könnte?

Antwort

8

Das ist, weil Sie "/" als zweiten Parameter (Optionen)

app.use(express.static(__dirname + '/')); 

Siehe dienen statisch sind vorbei:

function serveStatic(root, options) ... 

https://github.com/expressjs/serve-static/blob/master/index.js

Beachten Sie auch, dass es besser wäre, um ein anderes Verzeichnis als das Root-Verzeichnis zu verwenden express.static(__dirname + '/public'), um zu vermeiden, dass Ihr Root-Konto offengelegt wird.

+0

Das hat funktioniert. Vielen Dank. Ich habe auch meine statischen Dateien in ein anderes Verzeichnis verschoben. Es ist seltsam, dass mein Code auf meinem Windows-Rechner und nicht auf meinem Mac funktioniert hat. Ich denke, es muss verschiedene Versionen eines Pakets unter der Haube geben. –

2

express.static wird verwendet, um das Verzeichnis zu definieren, in dem sich Ihre "statischen" Dateien befinden, siehe here for more info.

Es nur einen String mit dem Pfad statisch sein Sie wollen akzeptiert:

app.use(express.static('/')); 

Oder

app.use(express.static(__dirname + '/')); 

Aber das macht nicht viel machen:

So Ihr Code sollte sein Sinn, imho.

Entfernen Sie die Zeile oder definieren Sie den tatsächlichen Pfad, in dem sich Ihre Assets befinden.

+0

Das ist schlecht, Sie sollten * nicht * die Wurzel Ihres Dateisystems der Welt aussetzen ... – mscdex

+0

Ich stimme zu, deshalb habe ich geschrieben, dass das nicht viel Sinn macht. –

+0

Danke, dass Sie mich auf diese Seite hingewiesen haben. Ich bin ein Front-End-Coder, also habe ich wenig Wissen über Back-End und Node, also war es hilfreich, ein wenig mehr Informationen zu bekommen. –

0

Der zweite Parameter, den Sie an express.static übergeben, ist falsch. Entferne den zweiten Parameter. app.use (express.static (__ dirname));