码迷,mamicode.com
首页 > 其他好文 > 详细

路径问题

时间:2019-10-21 13:19:31      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:table   模块   shel   ref   nodejs   nod   nbsp   tab   void   

目录结构

|— /module

???|— path.js

|— index.js

|— a.txt

module/path.js

1
2
3
4
5
6
7
8
9
const fs = require("fs");
fs.readFile("../a.txt",(err,data) => {
if(err) {
console.log(err);
}else{
console.log(data);
}
});

index.js

1
const foo = require("./module/path");

然后我们执行index.js

1
2
$ node 04-path.js
{ Error: ENOENT: no such file or directory, open '../a.txt' errno: -2, code: 'ENOENT', syscall: 'open', path: '../a.txt' }

原因是没有找到。咦?路径没有错啊,path.js上级目录下面的a.txt。

其实原因是这样的。在node执行的时候,是会以入口文件为基准,去找文件。我们的入口文件是index.js。那么a.txt是和它平级,在module/path.js中写成./a.txt就可以了,我们试一下。

1
2
3
4
5
6
7
8
9
10
const fs = require("fs");
- fs.readFile("../a.txt",(err,data) => {
+ fs.readFile("./a.txt",(err,data) => {
if(err) {
console.log(err);
}else{
console.log(data);
}
});

在执行一下index.js

1
2
$ node index.js
<Buffer 53 75 6e 20 4a 75 6c 20 32 33 20 32 30 31 37 20 32 31 3a 30 34 3a 31 38 20 47 4d 54 2b 30 38 30 30 20 28 43 53 54 29>

可以读出来了,但是是buffer,我们需要toString一下

1
2
3
4
5
6
7
8
9
10
const fs = require("fs"< 大专栏  路径问题/span>);
fs.readFile("./a.txt",(err,data) => {
if(err) {
console.log(err);
}else{
- console.log(data);
+ console.log(data.toString());
}
});

再执行一下index.js

1
2
$ node index.js
Sun Jul 23 2017 21:04:18 GMT+0800 (CST)

我们成功了!but,有一个问题,我们试着想一下,我们在阅读module/path.js的代码时,看到./a.txt会误以为在module文件夹下有a.txt(实际上没有)。所以我们要引出下面的东西

__dirname 获取当前脚本所在路径

__filename 获取文件路径

module/path.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
+
+ console.log(__dirname);
+ //获取文件路径
+ console.log(__filename);
const fs = require("fs");
fs.readFile("./a.txt",(err,data) => {
if(err) {
console.log(err);
}else{
console.log(data.toString());
}
});

执行index.js

1
2
3
4
$ node index.js
/Users/melody0z/github/nodejs/second/module
/Users/melody0z/github/nodejs/second/module/path.js
Sun Jul 23 2017 21:04:18 GMT+0800 (CST)

我们发现上面的两个东西可以获取绝对路径

所以我们在文件操作的时候路径都必须是绝对路径(物理路径)

1
2
3
4
5
6
7
8
9
const fs = require("fs");
- fs.readFile("./a.txt",(err,data) => {
+ fs.readFile(__dirname + "/../a.txt",(err,data) => {
if(err) {
console.log(err);
}else{
console.log(data.toString());
}
});

这样看起来是不是舒服多了

注意点:

  • __dirname可以获取当前文件所在目录的完整路径;在模块全局环境有效,但在REPL环境无效
  • __filename可以用来获取当前文件的完整路径;在模块全局环境有效,但在REPL环境无效

本文结束,感谢阅读。

本文作者:melody0z
本文链接:https://melodyvoid.github.io/Node/routing-problem.html
欢迎转载,转载请注明文本链接

路径问题

标签:table   模块   shel   ref   nodejs   nod   nbsp   tab   void   

原文地址:https://www.cnblogs.com/sanxiandoupi/p/11712879.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!