Node.js中路径模块的join方法以及__dirname和./的区别

Node.js中路径模块的join方法以及__dirname和./的区别

一、join方法

path.join() 方法使用特定于平台的分隔符作为定界符将所有给定的 path 片段连接在一起,然后规范化生成的路径。

零长度的 path 片段被忽略。 如果连接的路径字符串是零长度字符串,则将返回 ‘.’,表示当前工作目录

path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');
// 返回: '/foo/bar/baz/asdf'

path.join('foo', {}, 'bar');
// 抛出 'TypeError: Path must be a string. Received {}'

如果任何路径片段不是字符串,则抛出 TypeError

二、__dirname 和 ./ 的区别

__dirname总是指向被执行 js 文件的绝对路径

看个例子

当在/react-admin-server/routers/file-upload.js 文件中写了 __dirname, 它的值就是/react-admin-server/routers

相反./会返回你执行 node 命令的路径,例如你的工作路径

有一个特殊情况是在require()中使用./时,这时的路径就会是含有 require()的脚本文件的相对路径

看一个例子
假设有如下目录结构

/react-admin-server
  /routers
    file-upload.js 

然后在file-upload.js 中,有如下代码,然后在终端执行了下面命令

cd /react-admin-server/routers
node file-upload.js 
var path = require("path");
console.log(path.resolve(".")); //  /react-admin-server/routers
console.log(path.resolve(__dirname)); //  /react-admin-server/routers

. 是你的当前工作目录,在这个例子中就是/react-admin-server/routers__dirnamefile-upload.js 的文件路径,在这个例子中就是 /react-admin-server/routers

然而,如果我们的工作目录是/react-admin-server

cd /react-admin-server
node routers/file-upload.js 

将会得到

/react-admin-server
/react-admin-server/routers

此时,.指向我们的工作目录,即/react-admin-server__dirname 还是指向 /react-admin-server/routers

三、综合应用

//__dirname表示当前文件所在的根路径,也就是/routers,然后..表示向上退一级,也就是到了项目根目录,然后public/upload表示到了这个目录
const dirPath = path.join(__dirname, '..', 'public/upload')

在这里插入图片描述

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 node.js 使用 axios 下载图片并保存到本地的步骤如下: 1. 安装 axios 库: ``` npm install axios ``` 2. 在项目引入 axios 库: ``` const axios = require('axios'); ``` 3. 使用 axios 的 `get` 方法发送一个 HTTP GET 请求,请求的地址是图片的 URL,并将响应的二进制数据流作为参数传递给一个回调函数: ``` axios.get('https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png', { responseType: 'stream' }) .then(function (response) { // 响应的二进制数据流 const stream = response.data; }) .catch(function (error) { console.error(error); }); ``` 4. 使用 node.js 的 `fs` 模块创建一个文件流,并将图片的二进制数据流写入文件: ``` const fs = require('fs'); axios.get('https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png', { responseType: 'stream' }) .then(function (response) { // 响应的二进制数据流 const stream = response.data; // 创建文件流 const fileStream = fs.createWriteStream('images/image.png'); // 将图片的二进制数据流写入文件 stream.pipe(fileStream); }) .catch(function (error) { console.error(error); }); ``` 请注意,在这里,我们将图片保存在了当前目录的 `images` 目录下,并命名为 `image.png`。你可以根据自己的需要更改目录和文件名。 希望这对你有帮助 ### 回答2: 在Node.js,您可以使用axios模块来下载并保存图片。首先,确保您已经安装了axios模块。接下来,您需要编写一个脚本来执行下载操作。 以下是在Node.js使用axios下载一张图片并保存的代码示例: ```javascript const axios = require('axios'); const fs = require('fs'); const path = require('path'); // 文件保存路径 const savePath = path.join(__dirname, 'images', 'image.png'); // 图片URL const imgUrl = 'https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png'; // 发起GET请求 axios .get(imgUrl, { responseType: 'stream' }) .then(response => { // 创建写入流 const writer = fs.createWriteStream(savePath); // 将响应流导入写入流 response.data.pipe(writer); // 监听写入完成事件 writer.on('finish', () => { console.log('图片下载完成'); }); // 监听写入错误事件 writer.on('error', err => { console.error('图片保存失败', err); }); }) .catch(error => { console.error('图片下载失败', error); }); ``` 请注意,该代码将使用axios发起GET请求,并使用fs模块创建一个写入流。通过将响应流导入写入流,来保存图片到指定路径。在此示例,图片将被保存到当前目录下的images文件夹,文件名为image.png。 使用该脚本后,您可以执行以下命令运行: ``` node script.js ``` 其,script.js为包含以上代码的文件名。 执行后,将会在images文件夹保存成功下载的图片。 ### 回答3: 在Node.js,可以使用`axios`库来下载图片并保存到当前的`images`目录。具体的步骤如下: 1. 首先,在项目根目录创建一个名为`images`的文件夹,用于保存下载的图片。 2. 在项目安装`axios`库,可以在终端运行以下命令: ``` npm install axios ``` 3. 创建一个新的JavaScript文件,比如`downloadImage.js`,并在文件引入`axios`库,以及Node.js内置的`fs`库(用于操作文件系统): ```javascript const axios = require('axios'); const fs = require('fs'); ``` 4. 使用`axios`发送GET请求来下载图片,并使用`fs`将其保存到`images`文件夹: ```javascript const imageUrl = 'https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png'; // 图片地址 axios .get(imageUrl, { responseType: 'stream' }) // 设定响应数据的类型为流 .then((response) => { const imagePath = './images/image.png'; // 图片保存路径 response.data.pipe(fs.createWriteStream(imagePath)); // 将响应数据流写入文件 }) .catch((error) => { console.error('图片下载失败:', error); }); ``` 5. 运行该文件,在终端执行以下命令: ``` node downloadImage.js ``` 如果一切正常,该脚本将会下载指定URL的图片并保存到当前目录下的`images`文件夹,图片的文件名为`image.png`。 注意:在运行脚本之前,确保目录已经存在`images`文件夹,并且确保有权限向该文件夹写入文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值