Nodejs的路径规则是什么

时间:2017-07-27 02:58:09

标签: node.js

我正在尝试构建一个基本的静态Web服务器,非常简单,几行,处理3个请求,一个图标,js和html文件:

项目结构:

-D:
  -project
    -build
      -index.html
      -fav.icon
      -dist.js
    -server.js

server.js中的代码

http.createServer(function(req, res) {
  //create dynamic filepath for response via requests MIME type
  let filePath = './build' + req.url;
  fs.access(filePath, callback(err){
    console.log(err);
    res.writeHead(200, {'Content-Type': contentType});
    let file = fs.createReadStream(__dirname + filePath);
    file.pipe(res);
  });
});

奇怪的是,我记得昨晚filePath工作了,但我不确定发生了什么或者我改变了什么,现在不行。所以我试着调试它,现在控制台会显示:

'no such file...D:\project.\build\'

有一个'。'在'\ build'之前,所以我试图删除它:

let filePath = '/build' + req.url;

然后会显示

'no such file...D:\build\'

'project'目录在哪里?再次,删除'/'brfore'build':

let filePath = 'build' + req.url;

'项目'回来了:

'no such file...D:\projectbuild\'

我尝试使用path.resolve(__ dirname,绝对路径)和path.join(__ dirname,相对路径),它们都返回相同。

我不知道为什么我昨晚可以访问我的服务器,但不是今天,我记得在某个地方我看到了“节点文件路径规则”或“节点文件访问规则”的链接,我用Google搜索了并尝试在Node Document中搜索,但没有运气,那么在Node中访问路径的规则是什么?

1 个答案:

答案 0 :(得分:1)

好的,所以__dirname将是您正在运行的文件的目录。因此,例如,如果您当前的工作目录是D:\project并且您运行node server.js,那么__dirname将返回" D:\ project"正如你所料。但是,如果您当前的工作目录实际上是D:\并且您运行node project\server.js,那么您可能不会期望" D:\ project"的结果。

如果你正在做什么,你想加入" __ dirname"用" build"然后最后是有问题的文件名。如果req.url是" index.html",则您需要阅读位于__dirname + \ + build + \ + index.html的文件。

因此,您正在寻找的联接功能将是这样的:

var fileUrl = path.join(__dirname, 'build', req.url);

path.join函数应该处理平台的规范化等等。