res*_*der 6 javascript node.js express
我正在尝试在Mac上启动一个非常简单的服务器,以便我可以从localhost访问一个文件.
我安装了node和express,这就是我服务器文件中的所有内容.
var express = require('express'),
app = express();
app.use(express.static(__dirname, '/'));
app.listen(8080);
console.log("App listening on port 8080");
Run Code Online (Sandbox Code Playgroud)
当我尝试做的时候:
node server
Run Code Online (Sandbox Code Playgroud)
我得到这个作为回应:
/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
Run Code Online (Sandbox Code Playgroud)
我在具有相同文件的Windows机器上运行同一个文件,没有任何问题.
经过一番挖掘,我发现这条线似乎是罪魁祸首:
app.use(express.static(__dirname, '/'));
Run Code Online (Sandbox Code Playgroud)
有人能告诉我可能会发生什么吗?
那是因为你传递"/"作为第二个参数(选项)
app.use(express.static(__dirname + '/'));
Run Code Online (Sandbox Code Playgroud)
请参阅serve-static:
function serveStatic(root, options) ...
Run Code Online (Sandbox Code Playgroud)
https://github.com/expressjs/serve-static/blob/master/index.js
另请注意,最好使用与root不同的目录,例如express.static(__dirname + '/public')避免暴露root.