首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Node.js 源码解析 util.promisify 如何将 Callback 转为 Promise

工作对于一些老项目,有 callback 的通常也会使用 util.promisify 进行转换,之前更多是知其然不知其所以然,本文会从基本使用对源码的理解实现一个类似的函数功能。 1....创建一个 text.txt 文件 创建一个 text.txt 文件,写入一些自定义内容,下面的 Demo 我们会使用 fs.readFile 来读取这个文件进行测试。...2.1 util.promisify.custom 基本使用 fs.readFile 上定义 util.promisify.custom 符号,其功能为禁止读取文件。...3.1 util.promisify 的基本使用 上面区别的地方在于 .then 接收到的是一个对象 { address, family } 先明白它的基本使用,下面会展开具体是怎么实现的 const...也意味着只有 Nodejs 模块例如 dns.klookup()、fs.read() 等方法多参数的时候可以使用 util.promisify 转为 Promise,如果我们自定义的 callback

2.3K10

搭建node服务(四):Decorator装饰器

Node.js还不支持Decorator,可以使用Babel进行转换,也可以TypeScript中使用Decorator。...    type: string; } @Required 是一个属性装饰器,使用时添加到属性声明前,作用是 target 的自定义属性metadata添加对应属性的必填规则。...访问符装饰器 访问符装饰器的使用与方法装饰器一致,参数返回值相同,只是访问符装饰器用在访问符声明之前。需要注意的是,TypeScript不允许同时装饰一个成员的getset访问符。...)     method() {     } } 3. design类型数据使用design类型数据需要在tsconfig.json设置emitDecoratorMetadata为true,如下所示...,通过给Controller层的类方法添加装饰器来定义路由信息,当创建路由扫描指定目录下所有Controller,获取装饰器定义的路由信息,从而实现自动添加路由。

1.6K20
您找到你想要的搜索结果了吗?
是的
没有找到

Node.js快速入门

8、Buffer(缓冲区) JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。 但在处理像TCP流或文件,必须使用到二进制数据。...end - 没有更多的数据可读触发。 error - 接收写入过程中发生错误时触发。 finish - 所有数据已被写入到底层系统触发。...通常我们用于从一个流获取数据并将数据传递到另外一个流。 以下实例我们通过读取一个文件内容并将内容写入到另外一个文件。...# cd fs 15.1 异步同步 Node.js 文件系统(fs 模块)模块的方法均有异步同步版本,例如读取文件内容的函数有异步的 fs.readFile() 同步的 fs.readFileSync...(stdout & stderr),进程返回大量数据使用

11.1K10

深聊Nodejs模块化

而 script 标签太多会导致文件之间依赖关系混乱,全局变量太多也会导致数据流相当紊乱,命名冲突内存泄漏也会更加频繁的出现。... Nodejs 源码 ,我们可以看到当解析不到文件名的时候,会尝试使用 tryExtensions 方法来添加扩展名:if (!..._extensions 对象上,前文有提到过:.js 文件:通过同步读取文件内容后编译执行.json 文件:通过 fs 模块读取文件,之后使用 JSON.parse 转化成 JS 对象.node 文件:...Nodejs 引入模块的加载顺序基本步骤 1、加载顺序速度: require 函数接收到模块标识符,会优先检查内存是否已经有缓存的模块对象,有的话直接返回,没有就继续查找。...然后就是文件模块,Nodejs 通过找到文件然后使用对应的方法加载文件的代码并执行。最后才是自定义模块。 2、加载基本步骤: 加载步骤大概有路径分析、文件定位编译执行三个过程。

1.6K21

Node.js安装及文件的读写

案例2:没有DOMBOM Node ,采用 EcmaScript 进行编码 没有 BOM、DOM 浏览器的 JavaScript 不一样 console.log(window) console.log... Node 如果想要进行文件操作,就必须引入 fs 这个核心模块 fs 这个核心模块,就提供了所有的文件操作相关的 API 例如:fs.readFile 就是用来读取文件使用 require...null 失败 data undefined没有数据 error 错误对象 error 如果读取失败,error就是错误对象 如果读取成功,error就是null data 如果读取成功.../data/hello.txt', function (error, data) { console.log(data) }) 新建的 hello.txt 文件写入 hello nodejs 你好... 文件存储的其实都是二进制数据 0 1 这里为什么看到的不是 0 1 呢?

1.3K20

Node.JS 学习记录(01)

Node 自带了交互式解释器,可以执行以下任务: 读取 - 读取用户输入,解析输入了Javascript 数据结构并存储在内存。...2 * 3 ) - 4 3 > 使用变量 你可以将数据存储变量,并在你需要的时候使用它。...停止 REPL 按下两次 ctrl + c 键就能退出 REPL: NPM 使用介绍 NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:...目录,因此代码只需要通过 require(‘express’) 的方式就好,无需指定第三方包路径。...例如,我们可以一边读取文件,一边执行其他命令,文件读取完成后,我们将文件内容作为回调函数的参数返回。这样执行代码就没有阻塞或等待文件 I/O 操作。

79010

Node·七天学会 NodeJS

但是,BOM 字符虽然起到了标记文件编码的作用,其本身却不属于文件内容的一部分,如果读取文本文件不去掉 BOM,某些使用场景下就会有问题。...例如把几个 JS 文件合并成一个文件后,如果文件中间含有 BOM 字符,就会导致浏览器 JS 语法错误。因此,使用 NodeJS 读取文本文件,一般需要去掉 BOM。...支持在读取文本文件,或者 Buffer 转换为字符串指定文本编码,但 GBK 编码不在 NodeJS 自身支持范围内。...输出响应 可以看到,第一版代码依次把请求的文件读取到内存之后,再合并数据输出响应。...并且在读取文件使用了只读数据流来简化代码。 第三次迭代 从工程角度上讲,没有绝对可靠的系统。即使代码没有 BUG,也可能因为操作系统,甚至是硬件导致服务器程序某一天挂掉。

2.1K20

MongoDB GridFS 怎么用

什么是GridFS GridFS 是MongoDB 的一个子模块,使用 GridFS 可以基于 MongoDB 来持久存储文件,并且支持分布式应用(文件分布存储读取)。...当你想访问大型文件的部分信息,却不想加载整个文件到内存,您可以使用GridFS 存储文件,并读取文件部分信息,而不需要加载整个文件到内存。...当你想让你的文件数据自动同步并部署多个系统设施,你可以使用GridFS 实现分布式文件存储。...最后根据“n”字段顺序读取 chunk 的“data”字段数据,还原文件。 存储过程如图下所示: fs.files 集合存储文件数据,以类 json 格式文档形式存储。...MIME类型 "metadata": // 文件自定义信息 } fs.chunks 集合存储文件文件内容的二进制数据,以类 json 格式文档形式存储。

4.2K20

Nodejs源码剖析】基于inotify的文件监听机制

Node.js实现了基于轮询的文件监听机制,基于轮询的监听其实效率是很低的,因为需要我们不断去轮询文件数据,如果文件大部分时间里都没有变化,那就会白白浪费CPU。...3 read(inotify实例对应的文件描述符, &buf, sizeof(buf)),如果没有事件触发,则阻塞(除非设置了非阻塞)。否则返回读取数据长度。buf就是保存了触发事件的信息。...Libuvinotify机制的基础上做了一层封装。我们看一下inotifyLibuv的架构图如图所示。 ? 我们再来看一下Libuv的实现。我们从一个使用例子开始。 1....并且往Libuv插入一个观察者io,Libuv会在Poll IO阶段注册到epoll。 2 往操作系统注册一个待监听的文件返回一个id。 3 Libuv判断该id是不是自己维护的红黑树。...不在红黑树,则插入红黑树。返回一个红黑树对应的节点。把本次请求的信息封装到handle(回调需要)。然后把handle插入刚才返回的节点的队列。这时候注册过程就完成了。

1.1K50

前端基础-Node.js核心模块的使用

第2章 核心模块的使用 2.1.1 FS模块 node核心模块之一,用于操作文件; 中文手册 : http://nodejs.cn/api/fs.html 文件读写 // 引入模块 var fs = require...cb,cb2){ // 回调函数 (写入成功后执行的函数) console.log(cb); console.log(cb2); }) // 从文件读取内容 fs.readFile...因为我们的服务器接受请求处理并响应数据,并没有指定响应数据的类型,所以出现了乱码; 而在http,我们可以通过服务器的响应头指定数据类型, http.ServerResponse 类 为我们提供了...但是,我们不能一直将html代码写到服务器的方法,而是需要建一个xx.html的文件,将html文件的内容返回给客户端; 2.2.2 .html : <!...].mtime = st.mtime; file_obj[i].size = st.size; // 当读取文件个数与所有文件个数相等

93710

七天学会NodeJS——第一天

Stream(数据流) 官方文档: http://nodejs.org/api/stream.html 当内存无法一次装下需要处理的数据,或者一边读取一边处理更加高效,我们就需要用到数据流。...但是,BOM字符虽然起到了标记文件编码的作用,其本身却不属于文件内容的一部分,如果读取文本文件不去掉BOM,某些使用场景下就会有问题。...支持在读取文本文件,或者Buffer转换为字符串指定文本编码,但遗憾的是,GBK编码不在NodeJS自身支持范围内。...输出响应 可以看到,第一版代码依次把请求的文件读取到内存之后,再合并数据输出响应。...并且,在读取文件,第二版代码直接使用了只读数据流来简化代码。 第三次迭代 第二次迭代之后,服务器本身的功能性能已经得到了初步满足。

6.9K20

面向前端工程师的 Node.js 入门手册(一)

; }) 上面的例子,通过使用node自带的http模块,调用其http.creatServer方法本机上开启了一个http服务,监听了本地的8000端口,代码逻辑很简单,当接收到一个req请求,...; }) 上例子,先确定了一个数据模型data,内部一共有三个字段。这里的数据模型就是前端开发前与后端所定义的返回格式,最终前端要拿到这个JSON格式的数据客户端进行处理。...但是上面例子的接口和我们常用的接口有一个差异点,就是接口名称返回内容均不规范,使用者直接通过没有路径的http://127.0.0.1:8000来使用接口,这跟我们日常使用的接口是完全不一样的,那我们接下来再看一下如何给提供一个规范化的接口呢...实例的源码简单解析一下,当服务接收到请求,先判断请求的api名称是不是事先约定好的/api/search/data,判断通过后,将前端传递链接上的参数userId获取到,处理后插入到返回的json...而在Nodejs,本身便提供了fs文件操作模块,这个模块模块底层并不是JavaScript来编写的,是具备操作文件的C++语言编写的,其封装完成后将上层暴露给Nodejs,然后便可以使用JavaScript

1K30

这里有一份Node.js入门指南和实践,请注意查收

从流读取数据的方式有很多种。 可写流(比如例子的 res)会暴露了一些方法,比如 write() end() 用于写入数据到流。...你可以用 readline 模块来读取 stdin,可以用来逐行读取文件流,也可用它来控制台用户进行一些交互。...解码查询字符串的参数 querystring.unescape 方法是 querystring.escape 相逆的方法,使用 querystring.parse 方法可能会用到。... Node.js 文件模块是一一对应的关系,可以理解为一个文件就是一个模块。.../INDEX')会返回两个不同的对象,无论'./index''./INDEX'是否是同一个文件。 5. 循环依赖 当 require()存在循环调用时,模块返回可能并不会被执行。

3.5K30

使用electron-vue + frp 开发一款穿透软件

服务端是不用管的,已经配置ok 客户端需要把解压后的frp文件夹,让用户能随心修改。(不能说每个用户使用此软件,都需要在本地下载一个frp压缩包) 能够软件里启动子进程。 ./frpc -c ....实现方法 需要读写frp/frpc.ini文件里的内容 用到nodejs里的ini, fs, path模块。 需要启动frp 用nodejs里 child_process 模块。...(__dirname, '../../') let filePath = path.join(appPath, 'frp', 'frpc.ini') let config = null // 开始读取数据...= config } }) 点击"连接", 能够修改frpc.ini // 写入数据 function writeConfig(config) { var iniObj = { common...(filePath, iniStr) } 可以读取写入frpc.ini之后, 就要建立连接了 nodejs里的子进程模块 http://nodejs.cn/api/child_process.html

58720

nodejs如何使用数据读写文件

nodejs如何使用文件流读写文件 nodejs,可以使用fs模块的readFile方法、readFileSync方法、read方法readSync方法读取一个文件的内容,还可以使用fs模块的writeFile...使用read、readSync读文件nodejs将不断地将文件中一小块内容读入缓存区,最后从该缓存区读取文件内容。...使用rite、writeSync写文件nodejs执行如下过程:1、将需要书写的数据写到一个内存缓冲区;2、待缓冲区写满之后再将该缓冲区内容写入文件;3、重复执行过程1过程2,直到数据全部写入文件为止...但在很多时候,并不关心整个文件的内容,而只关注是否从文件读取到某些数据,以及在读取到这些数据所需执行的处理,此时可以使用nodejs文件流来执行。...应用程序各种对象之间交换传输数据,总是先将该对象中所包含的数据转换成各种形式的流数据(即字节数据),再通过流的传输,到达目的对象后再将流数据转换为该对象可以使用数据

5.9K50

技术干货| 如何在MongoDB轻松使用GridFS?

什么时候使用GridFS MongoDB使用GridFS存储大于16 MB的文件某些情况下,MongoDB数据存储大型文件可能比系统级文件系统上存储效率更高。...当你希望保持文件数据多个系统设施之间自动同步部署,可以使用GridFS。使用地理分布的复制集,MongoDB可以自动将文件及其数据分发到多个mongod实例设施。...上传文件的新版本后,您可以原子更新数据中指示为“最新”状态的字段,然后需要删除以前的版本。...默认情况下,GridFS使用两个集合以及一个名为fs的存储桶: fs.files fs.chunks 您可以选择其他存储桶名称,也可以一个数据创建多个存储桶。...需要文件摘要的应用程序应在GridFS外部实现它,并将其存储files.metadata。 filemd5命令返回的完整文件的MD5哈希。此值为字符串类型。 files.filename 可选的。

6.3K30

面向前端工程师的Nodejs入门手册(一)

; }) 上面的例子,通过使用node自带的http模块,调用其http.creatServer方法本机上开启了一个http服务,监听了本地的8000端口,代码逻辑很简单,当接收到一个req请求...; }) 上例子,先确定了一个数据模型data,内部一共有三个字段。这里的数据模型就是前端开发前与后端所定义的返回格式,最终前端要拿到这个JSON格式的数据客户端进行处理。...但是上面例子的接口和我们常用的接口有一个差异点,就是接口名称返回内容均不规范,使用者直接通过没有路径的http://127.0.0.1:8000来使用接口,这跟我们日常使用的接口是完全不一样的,那我们接下来再看一下如何给提供一个规范化的接口呢...实例的源码简单解析一下,当服务接收到请求,先判断请求的api名称是不是事先约定好的/api/search/data,判断通过后,将前端传递链接上的参数userId获取到,处理后插入到返回的json...而在Nodejs,本身便提供了fs文件操作模块,这个模块模块底层并不是JavaScript来编写的,是具备操作文件的C++语言编写的,其封装完成后将上层暴露给Nodejs,然后便可以使用JavaScript

1K30
领券