2017-07-27 49 views
0

我试图建立一个基本的静态Web服务器,很简单的一个,几行字,处理3名的请求,图标的路径规则,JS和html文件:什么的NodeJS

项目struture:

在server.js
-D: 
    -project 
    -build 
     -index.html 
     -fav.icon 
     -dist.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); 
    }); 
}); 

奇怪的是,文件路径,昨晚的工作我记得,但我不知道发生了什么事或什么,我已经改变了,它不工作了。所以我试图调试它,现在控制台会显示:

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

有一个'。'之前“\建设”那里,所以我试图删除此:

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

然后它会显示

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

哪里是“项目”目录?再次,去掉 '/' brfore '构建':

let filePath = 'build' + req.url; 

'项目' 回来:

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

我试图用path.resolve(__目录名称,绝对路径)和path.join(__目录名,相对路径),他们都返回相同的。

我不知道为什么我昨晚可以访问我的服务器,但不是今天,我记得在某处我看到一个链接到'节点文件路径规则'或'节点文件访问规则'类似的东西,我GOOGLE了它试图在节点文档中搜索,但没有运气,那么在Node中访问路径的规则是什么?

回答

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功能应处理标准化的平台等。

+0

谢谢你的答案,它的工作原理,所以为了进一步的用法,你能告诉我'/ build'和'./build'是什么意思,我想了解更多关于Node文件访问路径规则。 –

+1

对于那些东西,节点只遵循Unix路径标准。因此,以斜杠开始的路径意味着“从根目录开始”。在Windows上,/ build会因此表示D:\ build,如果您在D驱动器中。从一个点开始,斜杠意味着“从当前目录开始”。因此,如果您在D:\ projects中并且您说./build,则路径将为D:\ projects \ build。您可以通过进入Node REPL和调用路径来使用它。解析()你想要尝试的任何字符串路径片段。 – Paul

相关问题