关于Node.js中的路径问题

本文摘要:node中读取文件时的路径问题


我们在写读取文件的代码时,经常要用到 ' fs ' 模块的 readFile方法,该方法的第一个参数就是path。

例如:现在我们有一个文件a.txt,我们要读取这个文件(这个文件跟执行程序处于同一目录下)。

我们可能会用到下面这种方法:

var fs = require('fs')

fs.readFile('./a.txt','utf8',function (err, data) {
    if (err) {
        throw err
    }
    console.log(data)
})

在当前目录下,用 node app.js 执行当前程序。发现没有问题,输出正确

但是,当我们换一个目录再执行呢?此时,我们换到上一级目录下(One)。执行  node 路径问题\app.js,结果:

发现,这时,程序出现了问题。 

查看出错日志,发现,程序到 One目录下,寻找 a.txt 。这显然是不对的,因为One是程序的上一层目录。

再换几个路径运行,我们不难发现,程序每次都会到当前目录下寻找a.txt。这是因为我们在写程序读取文件的时候,用了'./'路径。所以才会出现这种问题。

解决方法:

这时,我们可以通过Node中内置的属性 ' __dirname ' 和 ' __filename ' ,来代替  ' ./ '

例如,

console.log(__dirname)
console.log(__filename)

运行,输出:

 可以发现,不管我们在哪里运行,这两个路径始终是不变的。他会自动获取当前程序的路径。所以,我们在写操作文件的程序的时候,可以这样写。

var fs = require('fs')
var path = require('path')

fs.readFile(path.join(__dirname, './a.txt'), 'utf8', function (err, data) {
    if (err) {
        throw err
    }
    console.log(data)
})

这样,不管我们在哪里执行,就算是换了操作系统,换了电脑,每次执行的时候 ' __dirname ' 都是动态获取的当前程序路径。

再配合  ' path ' 模块 的 ' path.join ' 方法,可以轻松的把路径合并。操作我们想操作的文件。

事实上,fs和path经常会同时出现。

注意:本文中说的是操作文件是的路径,而并不是引入模块的路径。

require('./b')  该方法,不受执行 node 命令所处路径影响

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值