[添加]所以我的下一个问题是,当我尝试添加新的依赖项时(npm install –save socket.io)。JSON文件也有效。我收到此错误:无法解析json
npm ERR! Unexpected string npm ERR! File: /Users/John/package.json npm ERR! Failed to parse package.json data. npm ERR! package.json must be actual JSON, not just JavaScript. npm ERR! npm ERR! This is not a bug in npm. npm ERR! Tell the package author to fix their package.json file. JSON.parse
因此,我一直在尝试找出为什么此错误一直在返回。所有文件(HTML,JSON,JS)都在我桌面上的同一文件夹内。我正在使用node.js和socket.io
这是我的JS文件:
var app = require('express')(); var http = require('http').Server(app); app.get('/', function(req, res){ res.sendFile('index.html'); }); http.listen(3000,function(){ console.log('listening on : 3000'); });
这是返回的内容:
MacBook-Pro:~ John$ node /Users/John/Desktop/Chatapp/index.js listening on : 3000 TypeError: path must be absolute or specify root to res.sendFile at ServerResponse.sendFile (/Users/John/node_modules/express/lib/response.js:389:11) at /Users/John/Desktop/Chatapp/index.js:5:7 at Layer.handle [as handle_request] (/Users/John/node_modules/express/lib/router/layer.js:76:5) at next (/Users/John/node_modules/express/lib/router/route.js:100:13) at Route.dispatch (/Users/John/node_modules/express/lib/router/route.js:81:3) at Layer.handle [as handle_request] (/Users/John/node_modules/express/lib/router/layer.js:76:5) at /Users/John/node_modules/express/lib/router/index.js:234:24 at Function.proto.process_params (/Users/John/node_modules/express/lib/router/index.js:312:12) at /Users/John/node_modules/express/lib/router/index.js:228:12 at Function.match_layer (/Users/John/node_modules/express/lib/router/index.js:295:3) TypeError: path must be absolute or specify root to res.sendFile at ServerResponse.sendFile (/Users/John/node_modules/express/lib/response.js:389:11) at /Users/John/Desktop/Chatapp/index.js:5:7 at Layer.handle [as handle_request] (/Users/John/node_modules/express/lib/router/layer.js:76:5) at next (/Users/John/node_modules/express/lib/router/route.js:100:13) at Route.dispatch (/Users/John/node_modules/express/lib/router/route.js:81:3) at Layer.handle [as handle_request] (/Users/John/node_modules/express/lib/router/layer.js:76:5) at /Users/John/node_modules/express/lib/router/index.js:234:24 at Function.proto.process_params (/Users/John/node_modules/express/lib/router/index.js:312:12) at /Users/John/node_modules/express/lib/router/index.js:228:12 at Function.match_layer (/Users/John/node_modules/express/lib/router/index.js:295:3)
错误非常明显,您需要指定一个绝对路径(而不是相对路径)和/或root在的config对象中设置res.sendFile()。例子:
root
res.sendFile()
// assuming index.html is in the same directory as this script res.sendFile(__dirname + '/index.html');
或指定一个根(用作第一个参数的基本路径res.sendFile():
res.sendFile('index.html', { root: __dirname });
root当您传递用户生成的文件路径时,指定路径可能会更有用,该文件路径可能包含格式不正确/恶意的部分..(例如../../../../../../etc/passwd)。设置root路径可防止此类恶意路径用于访问该基本路径之外的文件。
..
../../../../../../etc/passwd