2015-06-29 1 views
6

Я пытаюсь запустить очень простой сервер на своем Mac, поэтому я могу получить доступ к файлу с localhost.Ошибка выполнения экспресс с узлом

У меня установлен узел и экспресс, и это все, что есть в моем файле сервера.

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

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

app.listen(8080); 

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

Когда я пытаюсь сделать:

node server 

я получаю это как ответ:

/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 

Я запускать этот файл на компьютере Windows, с теми же файлами и не было проблем.

После некоторого копания, я нашел эту линию, кажется, главный виновник:

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

Может кто-нибудь сказать мне, что может происходить?

ответ

8

Это потому, что вы передаете "/" в качестве второго параметра (параметров)

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

См служат статические:

function serveStatic(root, options) ... 

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

Также отметим, что было бы лучше использовать другой каталог, чем ваш корень, например express.static(__dirname + '/public'), чтобы избежать разоблачения вашего корня.

+0

Это сработало. Спасибо. Я также перенес мои статические файлы в другой каталог. Странно, что мой код работал на моей машине с Windows, а не на моем Mac. Я думаю, что под капотом должны быть разные версии пакета. –

2

express.static используется, чтобы определить каталог, в котором находятся ваши «статические» файлы, на странице here for more info.

Он принимает только строку с пути, который вы хотите быть статичным:

Так что ваш код должен быть:

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

Или

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

Но это не делает много смысл, имхо.

Удалите строку или определите реальный путь, где находятся ваши файлы ресурсов.

+0

Это плохо, вы должны * не * раскрывать корень вашей файловой системы миру ... – mscdex

+0

Согласен, поэтому я написал, что это не имеет большого смысла. –

+0

Спасибо, что указал на эту страницу. Я ведущий кодер, поэтому у меня мало знаний о конце и узле, поэтому было полезно получить немного больше информации. –

0

Второй параметр, который вы передаете в express.static, неверен. удалите второй параметр. app.use (express.static (__ dirname));