2015-06-29 11 views
6

Sto provando ad avviare un server molto semplice sul mio Mac in modo da poter accedere a un file da localhost.Errore nell'esecuzione express con il nodo

Ho nodo ed espresso installato e questo è tutto ciò che è nel mio file server.

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

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

app.listen(8080); 

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

Quando provo a fare:

node server 

ottengo questo come risposta:

/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 

Ho eseguito questo stesso file su una macchina Windows con gli stessi file e non ha avuto problemi

Dopo un po 'di scavo, ho trovato questa linea sembra essere il principale colpevole:

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

Qualcuno può dirmi che cosa potrebbe accadere?

risposta

8

Questo è perché si sta passando "/" come secondo parametro (opzioni)

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

Vedere servire-static:

function serveStatic(root, options) ... 

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

anche notare che sarebbe meglio per usare una directory diversa dalla tua radice es express.static(__dirname + '/public') per evitare di esporre la tua radice.

+0

Questo ha funzionato. Grazie. Ho anche spostato i miei file statici in una directory diversa. È strano che il mio codice abbia funzionato sulla mia macchina Windows e non sul mio Mac. Penso che ci debbano essere versioni diverse di un pacchetto sotto il cofano. –

2

express.static viene utilizzato per definire la directory in cui risiedono i file "statici", vedere here for more info.

Si accetta solo una stringa con il percorso che si desidera essere statico:

Così il vostro codice dovrebbe essere:

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

O

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

Ma questo non ha molto senso, imho.

Rimuovere la linea o definire il percorso reale in cui si trovano i file delle risorse.

+0

Questo è male, dovresti * non * esporre la radice del tuo filesystem al mondo ... – mscdex

+0

Sono d'accordo, ecco perché ho scritto che non ha molto senso. –

+0

Grazie per avermi indirizzato a quella pagina. Sono un coder front-end, quindi ho una scarsa conoscenza del back-end e del nodo, quindi è stato utile avere un po 'più di informazioni. –

0

Il secondo parametro che si sta passando a express.static non è corretto. rimuovi il secondo parametro. app.use (express.static (__ dirname));

Problemi correlati