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

JavaScript 编程精解 中文第三版 二十、Node.js

你也可以在那里找到 Node.js 的更多文档。 背景 编写通过网络通信的系统,一个更困难的问题是管理输入输出,即向/从网络和硬盘读写数据。...每次客户端尝试连接服务器,服务器都会调用传递给createServer函数的参数。request和response绑定都是对象,分别表示输入数据输出数据。...所以我们连接两个流的'error'事件来拒绝Promise。 当pipe完成,它会关闭输出流,从而导致触发'finish'事件。 这是我们可以成功解析Promise的地方(不返回任何内容)。...当找不到文件尝试用mkdir创建一个目录。 当路径中存在目录,可以返回 204 响应,以便目录创建请求是幂等的。 如果这里存在非目录文件,则返回错误代码。...向文件服务器发送请求,若URL是一个目录,服务器会返回该目录下的文件列表,你可以利用该特性实现你的网页。 不要直接编辑文件服务器开放的代码,如果你犯了什么错误,很有可能就破坏了你的代码

2.1K40

用了这么久axios,你知道它是如何封装 HTTP 请求的吗?

从上面的代码中可以看到,axios 的用法与 jQuery 的 ajax 方法非常类似,两者都返回一个 Promise 对象(在这里也可以使用成功回调函数,但还是更推荐使用 Promise 或 await...; // 返回响应数据 }, function (error) { // 响应出错后所做的处理工作 return Promise.reject(error); }); 从上面的代码,我们可以知道...:发送请求之前,我们可以对请求的配置参数(config)做处理;在请求得到响应之后,我们可以对返回数据做处理。...当请求或响应失败,我们还能指定对应的错误处理函数。 撤销 HTTP 请求 在开发与搜索相关的模块,我们经常要频繁地发送数据查询请求。一般来说,当我发送下一个请求,需要撤销上个请求。...== 'undefined' && Object.prototype.toString.call(process) === '[object process]') { // Node.js 请求模块

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

JavaScript错误处理完全指南

当你尝试重赋值 const ,会发生 TypeError: const name = "Jules"; name = "Caty"; // TypeError: Assignment to constant...当我们在浏览器中做蠢事它们就会被抛出,例如: document.body.appendChild(document.cloneNode(true)); 结果: Uncaught DOMException...在何时何地捕获代码中的异常取决于具体的用例。 例如,你可能想在堆栈中传播一个异常,以使程序完全崩溃。出现致命的错误时可能就会是这种情况,因为停止程序比处理无效数据更安全。...此代码输出是: const promise1 = Promise.reject(Error("No good, sorry!"))...; 当我们从一个 async 函数中抛出异常,异常将成为底层 Promise 被拒绝的原因。 可以使用 catch 从外部拦截任何错误。

4.9K20

JavaScript 错误处理大全【建议收藏】

下面的例子是当你尝试重新为 const 赋值,将触发 TypeError: const name = "Jules"; name = "Caty"; // TypeError: Assignment...你在什么时候及在什么地方捕获代码中的异常取决于特定的用例。 例如,你可能想要在栈中传播异常,使程序完全崩溃。当发生致命的错误,需要更安全地停止程序而不是处理无效数据,你可能需要这样做。...它接收错误对象,可以在这里对其进行检查(并远程发送到生产环境中的日志服务器)。 另外无论函数的执行结果如何,不管是成功还是失败,finally 中的所有代码都会被执行。...这里代码输出是: AggregateError: No Promise in Promise.any was resolved Always runs!...; 当我们从异步函数中抛出异常,异常会成为导致底层 Promise 被拒绝的原因。 任何错误都可以通过外部的 catch 来拦截。

6.3K50

【笔记】如何获得前端offer

,服务器监听到端口有发送过来的请求,进行解析url的路径,根据服务器的路由配置,返回相应的信息,浏览器根据数据包的Content-Type来判断如何进行解析。...image typeof(null) // object typeof({}) // object 表达式:一组代码的集合,它返回一个值。...Promise.race当iterable参数里的任意一个子promise被成功或失败后,父promise马上也会用子promise的成功返回值或失败详情作为参数调用父promise绑定的相应句柄,并返回该...).sort()); // 结果 ["0", "1", "2"] // 使用Array.forEach输出属性名和属性值 Object.getOwnPropertyName(obj).forEach...node.js不是一门语言 node.js不是库,不是框架 Node.js是一个JavaScript运行时环境 node.js可以解析和执行JavaScript代码 node.js中的JavaScript

5.5K20

【高能笔记】如何获得令人心动的前端offer

,服务器监听到端口有发送过来的请求,进行解析url的路径,根据服务器的路由配置,返回相应的信息,浏览器根据数据包的Content-Type来判断如何进行解析。...typeof(null) // object typeof({}) // object 表达式:一组代码的集合,它返回一个值。...Promise.race当iterable参数里的任意一个子promise被成功或失败后,父promise马上也会用子promise的成功返回值或失败详情作为参数调用父promise绑定的相应句柄,并返回该...).sort()); // 结果 ["0", "1", "2"] // 使用Array.forEach输出属性名和属性值 Object.getOwnPropertyName(obj).forEach...node.js不是一门语言 node.js不是库,不是框架 Node.js是一个JavaScript运行时环境 node.js可以解析和执行JavaScript代码 node.js中的JavaScript

2.5K10

前端经典面试题合集

所以,为了避免复杂性,从一诞生,JavaScript就是单线程,这已经成了这门语言的核心特征,将来也不会改变js代码执行过程中会有很多任务,这些任务总的分成两类:同步任务异步任务当我们打开网站,网页的渲染过程就是一大堆同步任务...异步指的是当一个进程在执行某个请求,如果这个请求需要等待一段时间才能返回,这个时候进程会继续往下执行,不会阻塞等待消息的返回,当消息返回系统再通知进程进行处理。...可能存在一个中间人,截取了对方发给我们的公钥,然后将他自己的公钥发送给我们,当我们使用他的公钥加密后发送的信息,就可以被他用自己的私钥解密。...(1)在区域传输的时候使用TCP协议辅域名服务器会定时(一般3小)向主域名服务器进行查询以便了解数据是否有变动。如有变动,会执行一次区域传送,进行数据同步。...描述: 此方法对于汇总多个 promise 的结果很有用,在 ES6 中可以将多个 Promise.all 异步请求并行操作,返回结果一般有下面两种情况。当所有结果成功返回按照请求顺序返回成功结果。

86120

探索异步迭代器在 Node.js 中的使用

行 {4} 这个是上面提到的 unconsumedPromises 数据来源处,例如当我们执行 for await...of 语句遍历异步迭代器对象就会自动触发 iterator 对象的 next()...2# 提到一个问题,for await...of 遍历事件的异步迭代器对象后面的代码块并不会被执行, 当我们触发一个事件才会在监听器函数里执行这个 resolve 函数,此时才会被释放,之后 for.../hello.txt', { encoding: 'utf-8', highWaterMark: 1 }); 以往当我们读取一个文件,需要监听 data 事件,拼接数据,在 end 事件里判断完成...MongoDB 中的 cursor 本处以 Node.js 驱动 mongodb 模块来介绍,当我们调用 db.collection.find() 这个方法返回的是一个 cursor(游标),如果想要访问文档那么我们需要迭代这个游标对象来完成...通过以下日志记录可以看到在第三次调用 hasNext() 返回了 false,如果此时在调用 next() 就会报错,游标已关闭,也就是已经没有数据可遍历了。

7.5K20

有哪些前端面试题是必须要掌握的_2023-02-27

然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。...当然,TCP可以立即发送一个数据段,也可以缓存一段时间以便一次发送更多的数据段(最大的数据段大小取决于MSS) 事件循环 图片 默认代码从上到下执行,执行环境通过script来执行(宏任务) 在代码执行过程中...所以,为了避免复杂性,从一诞生,JavaScript就是单线程,这已经成了这门语言的核心特征,将来也不会改变 js代码执行过程中会有很多任务,这些任务总的分成两类: 同步任务 异步任务 当我们打开网站...(TLD)服务器如.com,.cn,.org等的地址,该例子中会返回.com的地址 接着向顶级域名服务器发送请求,然后会返回次级域名(SLD)服务器的地址,本例子会返回.test的地址 接着向次级域名服务器发送请求...当我们把一个 DocumentFragment 节点插入文档树,插入的不是 DocumentFragment 自身,而是它的所有子孙节点。

57620

来自大厂 10+ 前端面试题附答案(整理版)_2023-03-15

—订阅模式的方法,通过 Object.defineProperty() 来劫持各个属性的 setter,getter,在数据变动发布消息给订阅者,触发相应的监听回调。...然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。...所以,为了避免复杂性,从一诞生,JavaScript就是单线程,这已经成了这门语言的核心特征,将来也不会改变js代码执行过程中会有很多任务,这些任务总的分成两类:同步任务异步任务当我们打开网站,网页的渲染过程就是一大堆同步任务...Node 中的 Event loop当 Node.js 开始启动,会初始化一个 Eventloop,处理输入的代码脚本,这些脚本会进行 API 异步调用,process.nextTick() 方法会开始处理事件循环...当对这两种类型使用 typeof 进行判断,Null 类型化会返回object”,这是一个历史遗留的问题。当使用双等号对两种类型的值进行比较时会返回 true,使用三个等号时会返回 false。

57920

『1W7字中高级前端面试必知必会』终极版

浏览器,邮件等一般的应用程序收发数据用 TCP DNS 查询等收发较短的控制数据用 UDP 连接服务器 浏览器调用 Socket.connect 在 TCP 模块处创建表示连接控制信息的头部 通过...删除套接字 客户端发送 FIN 服务端返回 ACK 号 服务端发送 FIN 客户端返回 ACK 号 ? ?...执行代码 高级语言编译器步骤: 输入源程序字符流 词法分析 语法分析 语义分析 中间代码生成 机器无关代码优化 代码生成 机器相关代码优化 目标代码生成 执行代码 执行全局代码,创建全局上下文 调用函数...Etag把此特征串发生给客户端,客户端在下次请求之时会把此特征串作为If-None-Match的值发送给服务端,服务器由此判断是否需要重新发送资源,如果不需要则返回 304,如果有则返回 200。...尾调用是指函数的最后一步只返回一个纯函数的调用,而没有别的数据占用引用。代码如下: const fib2 = (n, a = 0, b = 1) => { if (typeof n !

77220

Node.js 应用的御用品: Node.js 错误处理系统

特别是对于 Node.js 开发人员,他们有时会也发现自己使用了不那么整洁的代码来处理各种错误,例如会在所有地方都用相同的逻辑来处理错误。那么,难道 Node.js 在处理错误方面不太友好 ? 不。...开发者错误:是指在写得不好的代码中出现了意想不到的错误。意思就是代码逻辑本身有一些问题,需要解决。一个很好的例子是尝试读取 “undefined” 的属性。要解决这个问题,必须更改代码。...这种情况会使代码流变得难以跟踪和理解。 那么,你可以使用 promise或async/await 替代回调。...在开发 Node.js/Express 应用程序时,你可能会发现自己花了很多时间处理承诺。当你忘记处理 reject ,会看到有关未处理 promise.reject 的警告信息。...在 Node.js 中的单个组件中处理错误的策略将确保开发人员节省宝贵的时间,并通过避免代码重复和丢失错误上下文来编写干净且可维护的代码。不得不说,它已经成为 Node.js 应用程序的必备保健品。

25920

Node.js 中的这几个场景都可以使用异步迭代器

行 {4} 这个是上面提到的 unconsumedPromises 数据来源处,例如当我们执行 for await...of 语句遍历异步迭代器对象就会自动触发 iterator 对象的 next()...2# 提到一个问题,**for await...of**** 遍历事件的异步迭代器对象后面的代码块并不会被执行,** 当我们触发一个事件才会在监听器函数里执行这个 resolve 函数,此时才会被释放.../hello.txt', { encoding: 'utf-8', highWaterMark: 1 }); 以往当我们读取一个文件,需要监听 data 事件,拼接数据,在 end 事件里判断完成...MongoDB 中的 cursor 本处以 Node.js 驱动 mongodb 模块来介绍,当我们调用 db.collection.find() 这个方法返回的是一个 cursor(游标),如果想要访问文档那么我们需要迭代这个游标对象来完成...通过以下日志记录可以看到在第三次调用 hasNext() 返回了 false,如果此时在调用 next() 就会报错,游标已关闭,也就是已经没有数据可遍历了。

3.7K40

前端经典面试题(有答案)_2023-03-15

所以在 if 代码块的前后输出 a 这个变量的结果,控制台会显示 a 并没有定义什么是物理像素,逻辑像素和像素密度,为什么在移动端开发需要用到@3x, @2x这种图片?...所以,为了避免复杂性,从一诞生,JavaScript就是单线程,这已经成了这门语言的核心特征,将来也不会改变js代码执行过程中会有很多任务,这些任务总的分成两类:同步任务异步任务当我们打开网站,网页的渲染过程就是一大堆同步任务...Node 中的 Event loop当 Node.js 开始启动,会初始化一个 Eventloop,处理输入的代码脚本,这些脚本会进行 API 异步调用,process.nextTick() 方法会开始处理事件循环...然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。...变更密码构件和结束握手协议完成了之后,客户端和服务器端就可以开始传送数据发送HTTP请求,服务器处理请求,返回响应结果TCP连接建立后,浏览器就可以利用 HTTP/HTTPS 协议向服务器发送请求了。

68430

ajax和fetch、axios的优缺点以及比较

在MDN上,讲到它跟jquery ajax的区别,这也是fetch很奇怪的地方: 当接收到一个代表错误的 HTTP 状态码,从 fetch()返回Promise 不会被标记为 reject, 即使该...相反,它会将 Promise 状态标记为 resolve (但是会将 resolve 的返回值的 ok 属性设置为 false ), 仅当网络故障时或请求被阻止,才会标记为 reject。...默认情况下, fetch 不会从服务端发送或接收任何 cookies, 如果站点依赖于用户 session,则会导致未经认证的请求(要发送 cookies,必须设置 credentials 选项)....不过感觉它的all方法应该是基于Promise.all()的 axios体积比较小,也没有上面fetch的各种问题,我认为是当前最好的请求方式 优缺点: 从 node.js 创建 http 请求 支持...Promise API 拦截请求和响应 转换请求和响应数据 取消请求 自动转换JSON数据 客户端支持防止CSRF/XSRF 以上内容整理于互联网

9.2K20

美团前端面试题整理_2023-02-28

对 Cookie 进行双重验证,服务器在用户访问网站页面,向请求域名注入一个Cookie,内容为随机字符串,然后当用户再次向服务器发送请求的时候,从 cookie 中取出这个字符串,添加到 URL 参数中...(3)请求体: post put等请求携带的数据 10 个 Ajax 同时发起请求,全部返回展示结果,并且至多允许三次失败,说出设计思路 这个问题相信很多人会第一间想到 Promise.all ,但是这个函数有一个局限在于如果失败一次就返回了...所以,为了避免复杂性,从一诞生,JavaScript就是单线程,这已经成了这门语言的核心特征,将来也不会改变 js代码执行过程中会有很多任务,这些任务总的分成两类: 同步任务 异步任务 当我们打开网站...Node 中的 Event loop 当 Node.js 开始启动,会初始化一个 Eventloop,处理输入的代码脚本,这些脚本会进行 API 异步调用,process.nextTick() 方法会开始处理事件循环...,因此先执行同步代码,所以先输出 start,然后输出 end 第一个事件循环主线程发起,因此先执行同步代码,所以先输出 start,然后输出 end; 再从上往下分析,遇到微任务,插入微任务队列,遇到宏任务

1K10

axios 是如何封装 HTTP 请求的

从上面的代码中可以看到,axios 的用法与 jQuery 的 ajax 方法非常类似,两者都返回一个 Promise 对象(在这里也可以使用成功回调函数,但还是更推荐使用 Promise 或 await...(error); }); 从上面的代码,我们可以知道:发送请求之前,我们可以对请求的配置参数(config)做处理;在请求得到响应之后,我们可以对返回数据做处理。...当请求或响应失败,我们还能指定对应的错误处理函数。 撤销 HTTP 请求 在开发与搜索相关的模块,我们经常要频繁地发送数据查询请求。一般来说,当我发送下一个请求,需要撤销上个请求。...适配器的处理逻辑 在适配器的处理逻辑上,http 和 xhr 模块(一个是在 Node.js 中用来发送请求的,一个是在浏览器里用来发送请求的)并没有在 dispatchRequest 函数中使用,而是各自作为单独的模块...它不仅确保了内部逻辑的一致性,而且还确保了在需要撤销请求,不需要直接更改相关类的样例数据,以避免在很大程度上入侵其他模块。

1K20

axios 是如何封装 HTTP 请求的

从上面的代码中可以看到,axios 的用法与 jQuery 的 ajax 方法非常类似,两者都返回一个 Promise 对象(在这里也可以使用成功回调函数,但还是更推荐使用 Promise 或 await...(error); }); 复制代码 从上面的代码,我们可以知道:发送请求之前,我们可以对请求的配置参数(config)做处理;在请求得到响应之后,我们可以对返回数据做处理。...当请求或响应失败,我们还能指定对应的错误处理函数。 撤销 HTTP 请求 在开发与搜索相关的模块,我们经常要频繁地发送数据查询请求。一般来说,当我发送下一个请求,需要撤销上个请求。...适配器的处理逻辑 在适配器的处理逻辑上,http 和 xhr 模块(一个是在 Node.js 中用来发送请求的,一个是在浏览器里用来发送请求的)并没有在 dispatchRequest 函数中使用,而是各自作为单独的模块...它不仅确保了内部逻辑的一致性,而且还确保了在需要撤销请求,不需要直接更改相关类的样例数据,以避免在很大程度上入侵其他模块。 总结 本文详细介绍了 axios 的用法、设计思想和实现方法。

1.9K50

axios 是如何封装 HTTP 请求的

从上面的代码中可以看到,axios 的用法与 jQuery 的 ajax 方法非常类似,两者都返回一个 Promise 对象(在这里也可以使用成功回调函数,但还是更推荐使用 Promise 或 await...(error); }); 复制代码 从上面的代码,我们可以知道:发送请求之前,我们可以对请求的配置参数(config)做处理;在请求得到响应之后,我们可以对返回数据做处理。...当请求或响应失败,我们还能指定对应的错误处理函数。 撤销 HTTP 请求 在开发与搜索相关的模块,我们经常要频繁地发送数据查询请求。一般来说,当我发送下一个请求,需要撤销上个请求。...适配器的处理逻辑 在适配器的处理逻辑上,http 和 xhr 模块(一个是在 Node.js 中用来发送请求的,一个是在浏览器里用来发送请求的)并没有在 dispatchRequest 函数中使用,而是各自作为单独的模块...它不仅确保了内部逻辑的一致性,而且还确保了在需要撤销请求,不需要直接更改相关类的样例数据,以避免在很大程度上入侵其他模块。 总结 本文详细介绍了 axios 的用法、设计思想和实现方法。

1.8K30

Node.js 应用建立一个更安全的沙箱环境

,宿主程序立即就会「退出」, sandbox 是在 VM 之外的环境创建的,需 VM 中的代码的 this 指向的也是 sandbox,那么 //this.constructor 就是外部的 Object...没有进程隔离,通过 VM 创建的 sanbox 大体是这样的 ? 那么,我们是不是可以尝试,将非受信代码,通过 vm2 这个模块隔离在一个独立的进程中执行呢?...处理的数据和结果,还有公开给沙箱的方法 进程间如何通讯,需要「动态代码」处理数据可以直接序列化后通过 IPC 发送给隔离 Sandbox 进程,执行结果一样经过序列化通过 IPC 传输。...我们可以将宿主的方法,在传递给 sandbox worker 之类做一下处理,转换为一个「描述对象」,包括了允许 sandbox 调用的方法信息,然后将信息,如同其它数据一样发送给 worker 进程,...,绕不开或实在需要提供这个功能,希望本文或 Safeify 能对大家有所帮助。

2.2K10
领券