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

七天学会NodeJS——第一天

遇到一个文件时,就把文件的绝对路径传给函数。函数拿到文件路径后,就可以做各种判断和处理。...如同上边所说,JS本身是单线程的,无法异步执行,因此我们可以认为setTimeout这类JS规范之外的由运行环境提供的特殊函数做的事情是创建一个平行线程后立即返回,让JS主进程可以接着执行后续代码,并在收到平行进程的通知后再执行函数...也就是说,即使平行线程完成工作了,通知JS主线程执行函数了,函数也要等到JS主线程空闲时才能开始执行。以下就是这么一个例子。...,直到所有数组成员处理完毕后,通过的方式触发后续代码的执行。...而对于固态硬盘,虽然的确存在多个并行IO通道,但是对于服务器并行处理的多个请求而言,硬盘已经在做并行IO了,对单个请求采用并行IO无异于拆东墙补西墙。

6.9K20

NodeJS+Express+MongoDB

下载成功后点击msi文件直接安装,这里以win7_64位的操作系统为例。...1.1.1、配置运行环境 1)、创建存放数据的文件夹 在任意没有中文的目录下新建文件夹,c:\data,在文件夹下存放MongoDB数据库文件与日志文件: c:\data\db用于存放mongodb...并在此目录下新建一个mongo.config文件文件内容如下: ##数据库目录## dbpath=C:\data\db ##日志输出文件## logpath=C:\data\log\db.log 3...1.1.2、运行MongoDB 1)、直接运行 如果安装完成后不想做任何配置,可以直接运行,其中mongod.exe是服务,应该先启动,: ? 启动客户端mongo.exe文件: ?...三、NodeJS+Express+MongoDB示例 四、示例下载  git:https://coding.net/u/zhangguo5/p/NodeJS002/git

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

NodeJS深度探秘:通过爬虫用例展示callback hell的处理方法以及高并发编程的几个有效模式

因为它的执行顺序有可能是随机的,你很难判断哪个函数先执行。另外我们通常使用回调来响应异步处理结果,这有可能造成深层次的嵌套,造成所谓的callback hell。...代码一个特点是我们会调用一个异步函数,然后传入一个作为参数,同时在中又再次调用异步函数,于是又得在里面再次嵌套函数。...在这个模式中每个元素(或者说是任务)虽然被异步读取,但元素被读取的顺序却是给定的,所以才叫异步顺序并发,如果我们将元素的读取分配到多个cpu核上同时执行,那么就形成了并行异步模式,我们可以修改一下上面例子...事实上我们自己写的代码,例如函数等都会在主线程中执行,但是异步任务可以利用操作系统的多核多线程模式来实现平行执行,假设我们要读取10个文件,那么我们可以使用上面forEach的方式启动readFile...,nodejs会把读取文件的请求提交给操作系统,操作系统会把读取请求分发给多个内核,于是文件读取就可以在不同cpu内核上同时运行,当文件内容读取完毕后,nodejs再使用它的主线程将读取到的内容分别提交给我们提供的函数

64310

Node.js 安装和入门

Node.js 异步编程的直接体现就是。...异步编程依托于调来实现,但不能说使用了后程序就异步化了。 函数在完成任务后就会被调用,Node 使用了大量的函数,Node 所有 API 都支持函数。...例如,我们可以一边读取文件,一边执行其他命令,在文件读取完成后,我们将文件内容作为函数的参数返回。这样在执行代码时就没有阻塞或等待文件 I/O 操作。...; 我们不需要等待文件读取完,这样就可以在读取文件时同时执行接下来的代码,大大提高了程序的性能。...因此,阻塞是按顺序执行的,而非阻塞是不需要按顺序的,所以如果需要处理函数的参数,我们就需要写在函数内。

1.3K10

Node.JS 学习记录(01)

下载安装 64 位安装包下载地址 : https://nodejs.org/dist/v4.4.3/node-v4.4.3-x64.msi Node.js REPL(交互式解释器) Node.js REPL...Node.js 函数 Node.js 异步编程的直接体现就是。 异步编程依托于调来实现,但不能说使用了后程序就异步化了。...函数在完成任务后就会被调用,Node 使用了大量的函数,Node 所有 API 都支持函数。...例如,我们可以一边读取文件,一边执行其他命令,在文件读取完成后,我们将文件内容作为函数的参数返回。这样在执行代码时就没有阻塞或等待文件 I/O 操作。...函数一般作为函数的最后一个参数出现: function foo1(name, age, callback) { } function foo2(value, callback1, callback2

80010

《Node.js权威指南》:HTTP服务器发送响应流

Nodejs里http模块的createServer()方法的函数的第二个参数是一个http.ServerResponse对象,可以利用这个对象来发送服务器端的响应数据。...响应头中包含常用字段如下: Content-Type:用于指定内容类型 location:用于将客户端重定向到另一个URL地址 content-disposition:用于指定一个被下载文件名 content-length...在一个慢速网络中或需要发送大量数据时,HTTP服务器端发送的数据并不一定会立即被客户端接收,nodejs会将数据缓存在内存中,并在对方可以接收数据的情况下将内存中的数据通过操作系统内核缓存区发送给对方。...可以不在setTimeout方法中使用callback参数,而是通过监听http.ServerResponse对象的timeout事件并指定事件函数的方法来指定当响应超时时所需执行的处理,方法如下:...1res.on( "timeout", function(){ 2 /*响应超时时需执行调处理*/ 3} ) 如果没有指定以上两种之一的超时,则当响应超时时将自动关闭与HTTP客户端连接的

1.6K30

一文看懂 Node.js 中的多线程和多进程

由于 Node.js 的非阻塞性质,不同的线程执行不同的,这些首先委托给事件循环。Node.js 运行时负责处理所有这一切。 为什么要使用NodeJS?...这意味着在一个过程中,只有一组指令能够在给定的时间执行。 仅在当前代码块的执行完成后,才移至下一个代码块。但是,JavaScript 的单线程性质使实现变得容易。...工作池是一个执行模型,负责产生和处理不同的线程。它同步执行任务,然后将结果返回到事件循环,最后事件循环将结果提供给。 总而言之,工作池负责异步 I/O 操作,即与系统磁盘和网络的交互。...Node.js 程序仅调用所需的函数或,而不会阻止其他代码的执行。最初 JavaScript 和 Node.js 都不打算处理 CPU 密集型或 CPU 绑定的任务。...使用 cluster 模块可以产生多个子进程,这些子进程可以共享一个公共端口。当子进程投入使用时,使用 NodeJS 的系统可以处理更大的工作量。

3.3K10

如何在小程序中实现文件上传下载

否 接口调用失败的函数 complete function 否 接口调用结束的函数(调用成功、失败都会执行)...代码中,url为我们需要下载文件,success为返回的事件,我们使用回函数,判断当前下载的HTTP 状态码statusCode并在前端展示,如果这个状态码是200则将文件存储到tempFilePath...除了函数,小程序也提供了一个返回值DownloadTask我们可以通过这个返回值函数来监控下载进度。代码如下。...complete function 否 接口调用结束的函数(调用成功、失败都会执行) object.success 函数 属性 类型 说明...接下来,需要在函数执行成功后,填写回函数,这里,我们将返回的 HTTP 状态码通过setData方法,将数据存返回到前端。如果你看到如图的效果,证明文件上传完成。

23.1K93

浅入vue脚手架 手把手教你撸一个简单脚手架

他会在当前目录下生成一个package.json文件。 bin文件的作用: 很多包都有一个或多个执行文件,希望放在PATH中,(实际上,就是这个功能让npm可执行的)。.../bin/index.js" }, 实际上就是相当于一个入口文件,这个入口文件就是他的可执行文件,你可以将其他js引入该文件中然后通过入口文件暴露出去,上面代码指定,cli命令对应的可执行文件为..., cli init Name action是执行command命令时发生的,参数为命令行中输入的name,即init 中的name,项目生成过程便发生在函数中。...其中:program.parse(process.argv)解析命令行中的参数,解析出name,并传入action。...: program.action action是执行command命令时发生的 * @param {type} node index.js init test == ljh-cli init ljh

1.3K30

RxHttp 一条链发送请求,新一代Http请求神器(一)

,如下,每发起一次请求,此接口就会被一次,并且此调在子线程进行(在请求执行线程) HttpSender.setOnParamAssembly(new Function() { @Override....subscribe(s -> { //下载成功,文件下载路径 }, throwable -> { //下载失败...//省略get/set方法 } 由于进度执行101次(上面注释有解释),而最下面观察者其实是不需要关心这么多事件的,只需要关心最后下载完成的事件,所以使用了filter操作符过滤事件,只要还未下载完成...最终下载完成后,拿到本地下载路径。 文件上传进度监听 RxHttp.postForm("http://www.......")....doOnNext(progress -> { //上传进度,0-100,仅在进度有更新时才会,最多回101次,最后一次Http执行结果

84230

文件分片上传和分片下载

{ return new Promise((resolve, reject) => { const reader = new FileReader(); // 注册文件读取完成后函数...fileReader = new FileReader(); // 创建 FileReader 对象 const chunkList: Blob[] = []; // 存储分片的数组 // 文件读取完成后函数...服务器接收分片并暂存,所有分片接收完成后合并为完整文件。 客户端可以监听上传进度事件并在进度条或提示中显示进度。 下面,我们主要讲讲前端范围的逻辑实现。...可以使用多个并行请求来下载分片,充分利用带宽并提高整体下载速度 难以恢复下载 如果网络故障或用户中断,整个文件必须重新下载 如果下载被中断,只需重新下载未完成的分片,而不是整个文件 下载效率 下载速度较慢...,特别是在网络不稳定或速度较慢的情况下 通过将大文件拆分成较小的片段并同时下载,提高文件下载效率 并行下载 不支持 支持,可以使用多个并行请求来下载分片 下载管理 整个文件作为一个整体进行下载 每个分片可以单独管理和下载

12410

一篇文章,搞懂异步和多线程的区别

在异步编程中,通常会针对比较耗时的功能提供一个函数,函数的参数中包含一个额外的参数,用于。而这个函数往往称作函数。当比较耗时的功能执行完毕时,通过函数将结果返回。...关于函数相关的知识可参考文章《两个经典例子让你彻底理解java机制》。 什么是多线程编程 多线程是指同时并发或并行执行多个指令(线程)。...在多核处理器上,线程才是真正的并行运行。多个处理器同时执行多个线程,以达到更加高效的处理。 一个简单的示例就是:开启两个浏览器窗口同时下载两个文件。...每个窗口都使用一个新的线程去下载文件,它们之间并不需要谁等待谁完成,而是并行进行下载。 下图展示了并发执行多线程应用程序的流程: ?...后面我们会继续讲解多线程与异步相关的其他知识点,比如异步调用与等。

7.6K20

深入浅出Promise,循序渐进掌握JavaScript异步编程

:当需要同时执行多个异步操作,并在所有操作都完成后进行处理时,可以使用Promise.all方法。...并行操作: Promise 的些高级方法Promise.all和Promise.race,使得并行操作变得更加简单。...开发者可以很方便地将多个异步操作并行执行,并等待它们全部完成或任一完成后继续进行后续处理。更好的代码组织: Promise 的链式调用可以使代码逻辑更加清晰可读。...在和reject函数被调用时,会根据状态的变化,将对应的函数添加到任务队列中,并在适当的时候执行。链式调用:通过then方法的链式调用,可以将多个异步操作按顺序组织起来。...通过链式调用的方式,我们可以将异步操作按照顺序组织起来,并在每一步都进行必要的处理。而setTimeout的代码往往需要通过函数的嵌套来处理多个异步操作,使代码变得复杂和难以理解。

43010

息息相关的 JS 同步,异步和事件轮询

使用异步 ( 函数、promise、async/await),可以不用阻塞主线程的情况下长时间执行网络请求。 了解异步的工作方式之前,咱们先来看看同步是怎么样工作的。...当上述代码在浏览器中加载时,console.log(' Hello World ') 被推送到堆栈中,并在完成后弹出堆栈。...cosole.log(“the end”) 被推送到堆栈中,在完成后执行并从堆栈中删除。 同时,计时器已经过期,现在被推送到消息队列。但是不会立即执行,这就是事件轮询开始的地方。...消息队列还包含来自DOM事件(单击事件和键盘事件)的。...同样,事件轮询检查调用堆栈是否为空,并在调用堆栈为空并执行时将事件推送到堆栈。 延迟函数执行 咱们还可以使用setTimeout来延迟函数的执行,直到堆栈清空为止。

9.8K31

nodejs基本原理总结

,javascript执行线程继续执行未完的javascript代码,当执行完成后该线程处于空闲状态,可以看下面这一段代码示例。...从上面注册事件后,事件循环得到激活,对于上面代码中fs.readFile这个读文件IO则开始真正执行,而这时候IO的执行跟javascript代码的执行便没有关系了,由nodejs底层libuv提供的线程池接收该文件...nodejs内部实际是多进程并行工作的,而是利用事件循环做了封口处理。...(),close事件,setImmediate的其他函数 idle, prepare:仅内部使用 poll:获取新的I/O 事件,在适当的条件下nodejs会阻塞在这个阶段 check:setImmediate...的函数在这里被调用 close callbacks:像socket.on("close",func)这一类执行close事件的

1.2K50

使用 Node.js 实现文件流转存服务

分片上传一般是将一个大文件划分成多个分片,然后通过并行或者串行的方式依次上传至服务器端。 如果文件上传失败,只需要再重新上传失败的分片即可。 什么是文件流转存服务 ?...有个这个函数,我们就只需要在接收数据的函数中将buffer都通过pushBuf函数写入缓存即可。 准备发送 目前下载数据包和缓存都已经准备就绪,接下来就是准备进行发送分片的操作了。...但是,还依然存在以下问题: 如何连续不断的从缓存中获取分片 如何发送分片 单个分片如果上传失败,如何重试 如何在所有分片都上传完成之后触发一个 如何实现多个分片并行上传 下面将逐步讲解思路,并提供相关实现代码...如何在所有分片都上传完成之后触发一个 到目前为止,整个服务的核心部分已经差不多了,send函数无论怎么调用,都会返回Promise对象,所以在所有分片都上传完成之后触发一个也就很容易了,只需要将所有的...而且多个send函数运行在同一个node.js进程上,所以对共享的reayCache的获取是一个串行的操作(nodejs进程在一个事件轮询周期中会依次执行多个send函数)。

3.3K10

【DNS 解析】使用DNSPOD实现动态公网解析(DDNS)

IP 而如上,别名就是域名,用一个固定的域名,解析到这些IP,即可实现DDNS 原理 基本流程就是获取公网IP,然后修改某个域名的解析为获得的IP 流程图如下 image.png 教程 准备 环境 需要下载...Nodejs:Node.js 中文网 (nodejs.cn) 在命令行运行 node-v 以及 npm -v 如果都能正常输出即可 新建项目 新建一个文件夹,名字任意 然后新建一个js,名称任意,但最好纯英文...,例如 index.js 获取公网IP 在这里,我们使用npm模块:nodejs-publicip 首先在项目目录执行 npm i --save nodejs-publicip 在index.js中加入...() .then((result) => { console.log(JSON.stringify(result)); //成功事件 }) ....可参考文章:windows设置定时任务执行程序命令_13271972的技术博客_51CTO博客 Nodejs原生循环执行 如果你的业务场景很复杂,需要几分钟就变一次解析(而且你的套餐TTL很短)的情况下

9.7K130

nodejs事件循环

nodejs事件循环 首先,我们需要了解node.js的基于事件循环的事件模型,正是因为它才使得node.js中函数十分普遍,也正是基于此,node.js实现了单线程高效的异步IO(这里说的单线程主要说的是执行...nodejs在启动时,他会创建一个类似于while(true)的结构,每次执行一次循环体称为一次tick,每个tick的过程就是查看是否有事件等待处理,如果有,则取出事件极其相关的函数并执行,然后执行下一次...两者都代表主线程完成后立即执行,其执行结果是不确定的,可能是setTimeout函数执行结果在前,也可能是setImmediate函数执行结果在前,但setTimeout函数执行结果在前的概率更大些...每一个事件循环都有一个或多个观察者,判断是否有事件需要执行的过程其实就是想这些观察者询问是否有需要处理的事件。...O观察者也就是I/O的事件,网络,文件,数据库I/O等 check观察者:顾名思义,就是需要检查的观察者。

99640

Gulp 前端自动化构建工具

,而是一个虚拟的文件对象流 (Vinyl Files),存储着原始文件的路径、文件名、内容等信息NodeJS 安装Gulp 是基于 NodeJS,所以需要安装 Node 和 npm 包管理工具,可根据自己的操作系统环境来下载相应的版本...Node | Downloads下载完成后,通过命令行查看 NodeJS 是否成功安装,Mac 系统的命令行在终端 (Terminal),Windows 系统的命令行可通过 window + r 输入...节点有了 package.json 的配置信息之后,我们就可以通过 npm-install 命令,一键下载 package.json 配置信息里的所有插件包如果需要删除插件包,可执行 npm uninstall...任务,该任务将 /src/less 文件下的 test.less 文件,转换为 test.css 文件,该文件将在 /buil/css 下生成,文件目录结构如下所示在实际开发过程中,我们定义了多个类似...,便会运行定义的其他任务gulp.task('default', () => { gulp.watch('src/less/*.less', function(){ gulp.run

1.7K41
领券