我的印象是,当您运行nodejs webserver时,web的根目录是包含实现web服务器的js文件的文件夹。所以如果你有C:\ foo \ server.js然后运行它,那么“/”指的是C:\ foo和“/index.htm”映射到C:\ foo \ index.htmnodejs web root
我有一个文件server.js与同级文件default.htm,但是当我尝试加载/default.htm的内容时,找不到该文件。绝对文件路径起作用。
“/”在哪里,它控制着什么?
工作了摄制我把它简化成这样:
var fs = require('fs');
var body = fs.readFileSync('/default.htm');
,发现它在寻找这
Error: ENOENT, no such file or directory 'C:\default.htm'
所以 “/” 映射到C:\
有没有办法控制web根目录的映射?
我注意到,相对路径做的工作。所以
var fs = require('fs');
var body = fs.readFileSync('default.htm');
成功。
我相信我的困惑源自我的原始实验项目文件在驱动器根目录的巧合放置。这允许引用/default.htm来正确解析;只有当我把东西放到一个文件夹中,将它们置于源代码控制之下时,才会显示此问题。
我一定会看看express,但是你还没有回答我的问题:是否有可能重新映射web根目录,如果可以的话如何?
为感兴趣的事,这是server.js,因为它目前为
var http = require('http');
var fs = require('fs');
var sys = require('sys');
var formidable = require('formidable');
var util = require('util');
var URL = require('url');
var QueryString = require('querystring');
var mimeMap = { htm : "text/html", css : "text/css", json : "application/json" };
http.createServer(function (request, response) {
var body, token, value, mimeType;
var url = URL.parse(request.url);
var path = url.pathname;
var params = QueryString.parse(url.query);
console.log(request.method + " " + path);
switch (path) {
case "/getsettings":
try {
mimeType = "application/json";
body = fs.readFileSync("dummy.json"); //mock db
} catch(exception) {
console.log(exception.text);
body = exception;
}
break;
case "/setsettings":
mimeType = "application/json";
body="{}";
console.log(params);
break;
case "/":
path = "default.htm";
default:
try {
mimeType = mimeMap[path.substring(path.lastIndexOf('.') + 1)];
if (mimeType) {
body = fs.readFileSync(path);
} else {
mimeType = "text/html";
body = "<h1>Error</h1><body>Could not resolve mime type from file extension</body>";
}
} catch (exception) {
mimeType = "text/html";
body = "<h1>404 - not found</h1>" + exception.toString();
}
break;
}
response.writeHead(200, {'Content-Type': mimeType});
response.writeHead(200, {'Cache-Control': 'no-cache'});
response.writeHead(200, {'Pragma': 'no-cache'});
response.end(body);
}).listen(8124);
console.log('Server running at http://127.0.0.1:8124/');
我不能完全肯定你的“路线”的意思,但我怀疑setsettings和的getSettings是诸如此类的事情你的意思是,如果我错了,请纠正我。
Nodejs似乎不支持任意映射web根目录。
所有这一切需要的是在文件系统中使用它们之前在前面加上了一段绝对卷材路径:
var URL = require('url');
var url = URL.parse(request.url);
var path = url.pathname;
if (path[0] == '/')
path = '.' + path;
你能后的server.js文件内容是什么? – 2013-03-20 00:49:06