Deno 中使用高级 API 进行文件操作的技巧和注意事项

前言

Deno 是一个基于 TypeScript 构建的新型运行时环境,旨在提供一种更简单、更安全的方式来构建和运行 JavaScript 应用程序。与 Node.js 不同,Deno 内置了一些高级 API,其中包括了许多关于文件和目录处理的功能。

在这篇文章中,我们将学习如何使用 Deno 提供的高级 API 进行文件操作,并且介绍一些使用这些 API 时的注意事项和技巧。

使用 Deno 核心模块的文件系统 API

Deno 基础库内置了很多关于文件系统处理的 API。你可以使用这些 API 来操作文件和文件夹,包括创建、删除、查找、迭代、读写等等操作。在这里,我们会介绍其中的一些常用的 API,并讲述如何使用它们来实现一些实际的任务。

下载文件

如果你想要从网上下载一个文件到本地,Deno 提供了一个通用的 fetch API,它可以从指定的 URL 中获取响应,并将响应中的二进制数据保存到文件或者内存中。

------ - ---- - ---- -------

----- ---- - ----- ---------------------------------------
----- ------ - ----- -------------------
----- --------------------------- --- --------------------

在这里,我们首先使用 fetch 方法从网络中获取到需要下载的文件的响应。因为 fetch 返回的是一个 Promise 对象,所以我们使用了 await 关键字来等待请求完成。一旦获得响应,我们就可以使用此响应中的 .arrayBuffer() 方法来将响应的二进制数据存放到内存中。

接着,我们使用 Uint8Array 构造函数来将 buffer 内存中的二进制数据转为 Uint8Array 实例,这样便可以存放到磁盘中了。最后使用 Deno.writeFile() 来将图片写入到本地磁盘中。

如果你想要将这个图片保存到指定的目录中,那么可以直接提供完整的文件路径作为 writeFile() 的第一个参数:

----- ------------------------------------ --- --------------------

读取文件

如果你想读取一个文本文件的内容,那么你可以使用 readTextFile() 函数,它会返回一个 Promise 包含了文件的 UTF-8 文本内容:

----- ------- - ----- ---------------------------------------

如果你希望获得一个文件的二进制数据,可以使用 readAll() 函数。它返回的是一个 Uint8Array 数组:

----- ---- - ----- ------------------------------------

同步读写文件

如果你想要使用更加阻塞版的同步 API,可以使用 Deno 还支持的函数。但是我们应该尽量使用异步 API,期望不要随地使用同步 API。

----- ------- - --- ---------------------
----- ---- - ------------------------------
----------------------------------

迭代目录

如果您希望在一个目录下查找所有的文件和目录,可以使用 Deno 提供的 walk() 函数。这个函数将接受一个目录的路径作为参数,并且递归地遍历该目录下的所有文件和目录。对于每一个文件和目录,回调函数都将被调用,传递两个参数:路径和文件信息。

以下示例使用 walk() 函数,在 src 目录中寻找所有的 TypeScript 文件:

--- ----- ------ ----- -- -------------------- -
  -- ------------- -- --------------------------- -
    ----- ------- - ----- ---------------------------------------
    ---------------------
  -
-

编写安全的文件操作代码

Deno 的文件系统 API 通过沙盒机制来保证了安全性。当你的应用程序需要读取或写入本地文件时,Deno 会要求你添加相应的权限,以确保只有经过授权的应用程序可以操作文件系统。在这里,我们想介绍一些如何编写安全的文件操作代码的建议。

1. 检查文件是否存在

在进行任何文件读取或写入操作之前,最好先检查文件是否存在,并在需要时创建文件或文件夹。可以使用 Deno.statSync() 函数来检查文件或目录是否存在。

-- --------------------------------------- -
  -- -----------------
  --------------------------------------- --- ---------------
- ---- -
  -- ----------------
  --------------------- --------- ---------------------------------------------
-

2. 检查读写权限

在使用文件读写 API 之前,应该首先检查应用程序是否有相应的权限,否则可能会抛出权限错误。

--- -
  ----- ------- - ----- ---------------------------------------
  ---------------------
- ----- --- -
  -- -- ---------- ----------------------------- -
    ----------------------------
  - ---- -
    -------------------------- ---
  -
-

同样地,当你需要写入文件时,也应该检查写入操作是否有足够的权限:

--- -
  ----- --------------------------------------- ------- ---------
- ----- --- -
  -- -- ---------- ----------------------------- -
    ----------------------------
  - ---- -
    -------------------------- ---
  -
-

3. 避免硬编码

最后,当你使用文件系统 API 时,应该尽量避免使用硬编码路径,尽可能地使用相对路径或者配置文件中的路径。

----- ---- - ------------ -- ----------------
----- ------- - ----- ------------------------

结论

通过这篇文章,我们学习了如何使用 Deno 提供的高级 API 来进行文件操作。我们看到了一些重要的示例代码,同时还介绍了如何编写安全的文件操作代码。我相信,如果你能够遵循这些建议并照常编写代码,你的应用程序将能够更加安全和可靠。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/670dd4a75f551281025e900a


猜你喜欢

  • 使用 Hapi.js 创建基本的登录和注册表单

    在今天的互联网时代,大多数网站都需要用户进行登录和注册。在前端领域,提供一个好的登录和注册表格往往是网站的基础之一。使用 Hapi.js 即可方便地快速创建基本的登录和注册表单,并且其代码易于维护。

    7 天前
  • Docker 部署 Fastify 应用程序的技巧

    Docker 是一个流行的容器化技术,它可以帮助开发人员快速部署应用程序,提高开发效率。Fastify 是一个快速、低开销的 Node.js Web 框架,使用它可以创建高性能的 Web 应用程序和 ...

    7 天前
  • Angular 中如何使用 jQWidgets 控件库增强用户交互体验

    在现代的 Web 应用程序中,用户交互体验是非常重要的。要让一个应用程序拥有良好的用户交互体验,需要使用一些强大的控件库,例如 jQWidgets。jQWidgets 是一个高质量的 jQuery 控...

    7 天前
  • 优化 React 单元测试:使用 Enzyme 进行组件测试

    单元测试是前端开发中非常重要的一环。在 React 开发中,单元测试也变得越来越重要。在进行单元测试时,我们需要对组件进行测试,以确保我们的组件可以正常工作并且在更改代码时不会引入新的错误。

    7 天前
  • Web Components 中的路由方案选择及其实现技巧

    前言 Web Components 的出现让前端开发更加灵活,但同时也带来了一些挑战。其中之一是如何有效地管理 Web Components 之间的路由。在本文中,我们将讨论 Web Componen...

    7 天前
  • 在使用 Mocha 测试中遇到的 “cannot find module'should'” 的解决方法

    在使用 Mocha 进行前端测试时,我们可能会遇到一个错误提示:“cannot find module 'should'”。因为 should 是一个非常常用的断言库,所以这个问题困扰了很多前端工程师...

    7 天前
  • Deno 中的运行时错误:TypeError: undefined is not a function

    随着 Deno 越来越受到前端开发者的关注,越来越多的人开始了解它的特性和用法。Deno 对于前端同学们来说,它提供了一个更加完整,更加现代化的 JavaScript 运行时环境。

    7 天前
  • 使用 Vue.js 如何实现浏览器缓存控制?

    在前端开发中,浏览器缓存是提高网站性能和用户体验的重要技术之一。Vue.js作为流行的前端框架之一,提供了方便的API来实现浏览器缓存控制。本文将介绍如何使用Vue.js实现浏览器缓存控制。

    7 天前
  • 完美解决SPA应用浏览历史出错问题

    什么是SPA应用? SPA应用(Single Page Application)是一种现代化的网络应用程序,其主要的特点是在一个单页面中加载和动态更新所有的页面内容。

    7 天前
  • 如何使用 Chai.js 和 Mocha.js 监听事件

    在前端领域,测试是关键的环节,在测试过程中,我们可以使用 Chai.js 和 Mocha.js 监听事件,以确保代码能够成功运行。 Chai.js Chai.js 是一个用于编写 BDD 和 TDD ...

    7 天前
  • ES2016(ES7)Async 简介及其实践

    ES2016(ES7)是 ECMAScript 的一个版本,在网站前端的开发中起到了重要的作用,其中包括很多新特性和语言扩展。其中,Async 是其中一个极其重要的变化。

    7 天前
  • 如何在 React 和 Redux 中使用响应式设计!

    前言 在当今的 Web 开发中,响应式设计越来越流行。在 React 和 Redux 中,我们可以通过使用现有库和组件来创建响应式 UI。本文将介绍如何使用这些工具和技术来创建响应式设计,并提供示例代...

    7 天前
  • React 如何处理多语言问题

    React 是一个广泛使用的 JavaScript 库,用于构建大型、可重用的用户界面。但是随着越来越多的应用程序需要支持多语言,React 这样的前端框架也需要能够处理多语言问题。

    7 天前
  • Kubernetes 域名解析实践

    在 Kubernetes 集群中,域名解析是非常重要的一环。它能够帮助开发者在不同的 Pod 之间以及集群内外的通信中,通过简洁的域名来访问服务,而不必关心具体的 IP 地址。

    7 天前
  • 如何在 Babel 中使用 decorator?

    引言 在开发过程中,我们常常遇到一些需要改变某个对象的属性或方法的需求,但直接修改它们可能会影响全局的逻辑,所以一种更好的做法是使用装饰器来对它们进行修改。装饰器是一种语法糖,可以在不更改原有代码的基...

    7 天前
  • 如何在 Hapi.js 中实现分页和筛选?

    随着前端应用的复杂性不断增加,后端的需求也越来越多。其中,分页和筛选是常见的需求。在 Hapi.js 中,实现分页和筛选只需要简单的配置和几行代码就可以完成。本文将详细介绍如何在 Hapi.js 中实...

    7 天前
  • Fastify 应用程序中集成 Redis 缓存教程

    在前端开发中,缓存被广泛使用,这是提高应用程序性能和用户体验的一种有效方式。Redis 是一种流行的内存数据库,可用于存储和访问键值对数据。在本教程中,我们将学习如何在 Fastify 应用程序中集成...

    7 天前
  • Enzyme:React Native 测试的入门指南

    前言 随着 React Native 的流行,越来越多的开发者开始使用这个平台构建移动应用程序。测试是任何项目中都必不可少的部分,而 Enzyme 是一个流行的 JavaScript 库,它可以轻松地...

    7 天前
  • ECMAScript 2021 中的 Record 和 Tuple 类型:如何更好地处理复杂数据结构

    ECMAScript 2021 中的 Record 和 Tuple 类型:如何更好地处理复杂数据结构 在 JavaScript 的日常编程中,复杂的数据结构往往需要被存储和操作,比如对象和数组。

    7 天前
  • 将 Node.js 应用程序从 Express.js 迁移到 Koa.js

    Express.js 一度是 Node.js 领域最流行的 Web 框架。但在近年来,Koa.js (Express.js 的后继者)变得越来越流行。Koa.js 的 API 设计非常简单,它主要使用...

    7 天前

相关推荐

    暂无文章