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

七天学会NodeJS——第一天

; }; 以上代码模块默认导出对象被替换为一个函数模块初始化 一个模块的JS代码仅在模块第一次被使用时执行一次,并在执行过程初始化模块导出对象。之后,缓存起来的导出对象被重复利用。...内置模块 如果传递给require函数的是NodeJS内置模块名称,不做路径解析,直接返回内部模块导出对象,例如require('fs')。...在回函数,除了可以使用request对象访问请求头数据外,还能把request对象当作一个只读数据流来访问请求体数据。以下是一个例子。...在回函数,除了可以使用response对象访问响应头数据外,还能把response对象当作一个只读数据流来访问响应体数据。以下是一个例子。...在NodeJS,几乎所有异步API都按照以上方式设计,回函数第一个参数都是err。因此我们在编写自己的异步函数时,也可以按照这种方式来处理异常,与NodeJS的设计风格保持一致。

6.9K20

NodeJS 读写文件 🎠

创建文件夹 同步方法 const fs = require('fs') fs.mkdirSync(`${__dirname}/雷猴`) 复制代码 NodeJS 有一个文件模块,叫 fs 。...=> { if (err) { console.error(err) } }) 复制代码 fs.unlink 方法有2个参数,第一个参数是文件路径和文件名,第二个参数是监听删除失败的回函数...,第一个参数是文件名;第二个参数是回,err 监听错误信息,data 是读取回来的数据。...需要注意的是,读取回来的 data 是一个二进制类型的数据,需要使用 toString() 方法转换成我们读得懂的数据。...总结 如果你使用 NodeJS 做后台,读写文件这块知识点是逃不过去的。它最常见的功能可以写日志,比如收集错误日志等。 日志我们也可以写在数据库里,不过不是所有电脑都装了相同的数据库。

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

nodeJS爬虫】前端爬虫系列 -- 小爬「博客园」

爬虫流程 看到了最终结果,那么我们接下来看看该如何一步一步通过一个简单的 nodejs 爬虫拿到我们想要的数据,首先简单科普一下爬虫的流程,要完成一个爬虫,主要的步骤分为: 抓取 爬虫爬虫,最重要的步骤就是如何把想要的页面抓取回来...那么该如何异步并发的200个页面去收集这4000个 URL 呢,继续寻找规律,看看每一页的列表页的 URL 结构: ? ?...OK,运行一下上面的函数,假设上面的内容我们保存在 server.js ,而我们有一个这样的启动页面 index.js, ? 现在我们在回里增加几行代码,打印出结果: ?...所以我们仅仅需要多做一层处理,将这个参数 URL 取出来再重新拼接成一个ajax URL 请求。...下面,贴出代码,在我们刚刚的回函数,继续我们4000个页面的爬取,并且控制并发数为5: ep.after('BlogArticleHtml',pageUrls.length*20,function(

1.4K80

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

微任务: process.nextTick() process.nextTick()方法用于延迟回函数的执行, nextTick 方法会将 callback 的回函数延迟到事件循环的下一次循环中...'request'事件的回函数,会返回一个 http.IncomingMessage 实例和一个 http.ServerResponse。...流读取数据的方式有很多种。 可写流(比如例子的 res)会暴露了一些方法,比如 write() 和 end() 用于写入数据到流。...对于只需写入数据到流或流消费数据的应用程序,并不需要直接实现流的接口,通常也不需要调用 require('stream')。...如果你需要将模块导出为一个函数(如:构造函数),或者想导出一个完整的出口对象而不是做为属性导出,这时应该使用 module.exports。

3.5K30

「万字进阶」深入浅出 Commonjs 和 Es Module

; exports 和 module.exports 可以负责对模块的内容进行导出; require 函数可以帮助我们导入其他模块(自定义模块、系统模块、第三方库模块的内容; commonjs 使用初体验...四 Es Module Nodejs 借鉴了 Commonjs 实现了模块化 , ES6 开始, JavaScript 才真正意义上有自己的模块化规范, Es Module 的产生有很多优势,比如:...module 模块引入 name ,并重命名为 bookName , module 模块引入 author ,并重命名为 bookAuthor。...import() 动态引入 import() 返回一个 Promise 对象, 返回的 Promise 的 then 成功回,可以获取模块的加载成功信息。...import() 可以动态使用,加载模块。 import() 返回一个 Promise ,成功回 then 可以获取模块对应的信息。

2.2K10

「万字进阶」深入浅出 Commonjs 和 Es Module

; exports 和 module.exports 可以负责对模块的内容进行导出; require 函数可以帮助我们导入其他模块(自定义模块、系统模块、第三方库模块的内容; commonjs 使用初体验...四 Es Module Nodejs 借鉴了 Commonjs 实现了模块化 , ES6 开始, JavaScript 才真正意义上有自己的模块化规范, Es Module 的产生有很多优势,比如:...module 模块引入 name ,并重命名为 bookName , module 模块引入 author ,并重命名为 bookAuthor。...import() 动态引入 import() 返回一个 Promise 对象, 返回的 Promise 的 then 成功回,可以获取模块的加载成功信息。...import() 可以动态使用,加载模块。 import() 返回一个 Promise ,成功回 then 可以获取模块对应的信息。

3.2K31

nodejs如何利用libuv实现事件循环和异步

loop中保存了各个阶段对应的数据结构。 2 执行uv_run函数进入死循环。 3 用户(nodejs)操作loop里的结构,注册事件和回。 4 libuv在每一轮循环里处理各个阶段。...(网络io) 3 Nodejs的启动流程 1 注册内置c++模块(通过process.binding函数使用内置c++模块)。...3 运行时,js通过process.binding函数链表中找到对应的模块,从而使用c++模块功能。...6 后往前遍历链表L,如果当前节点没有超时则全部没有超时,设置新的超时时间,否则执行超时回。...因为文件的异步操作在各操作系统兼容性不好。libuv线程池默认打开4个,最多打开128个线程。所有线程共享一个任务队列,当有任务的时候,添加到任务队列,线程的工作函数在死循环里不断处理队列里的任务。

4K82

nodejs之js调用c++初探

nodejs的很多功能都是通过c++或者通过c++层调用libuv层实现的,nodejs如何在js层面调用c++的呢?...在nodejs启动的过程。在Environment::Start函数中生成了process对象。...的启动流程文章我们分析过binding函数就是在一个内置模块链表中找到对应的模块。...然后执行该模块注册的时候,然后返回一个该模块导出的对象。这就是底层的binding函数做的功能,但是我们在process.binding的时候,并不是直接执行了c++层的binding函数。...所以在nodejs里,不管是v8内置的js函数,对象,还是nodejs额外提供的那些模块功能,他最后都是由v8去处理的。虽然无法在js里直接调用c++功能,但是可以在js被编译后使用c++功能。

4.6K20

Node 概念及中间件

node_modules|bower_components(依赖模块) -> not found * 指定路径:找指定路径 -> not found模块化代码执行 * 模块里的代码引入的那一行开始执行...) // 调用请求时的回函数并传递响应数据 res.sendFile(path.resolve('public/error.html')) // 渲染纯 HTML 文件 // 上部引入const...path = require("path"); jsonp响应 app.set('jsonp callback name','回函数名') // 默认callback app.get...token的实现 // 安装并引入jsonwebtoken const jwt = require('jsonwebtoken'); // 生成token,返回给客户端 --- 异步回函数...五、文件上传 思想:前端表单->后端接收到文件本身->保存到服务器上->给数据库记录文件一些信息->库返回给nodejs相关信息->nodejs返回给前端 <!

5.4K20

nodejs源码分析之线程

首先我们worker_threads模块开始分析。这是一个c++模块。我们看一下他导出的功能。require("work_threads")的时候就是引用了InitWorker函数导出的功能。...设置一系列原型方法,就不一一列举 env->SetProtoMethod(w, "setEnvVars", Worker::SetEnvVars); // 一系列原型方法 // 导出函数模块对应的函数...根据上面代码导出的逻辑,我们知道这时候首先会新建一个c++对象。对应上面的Worker函数的this。然后执行New回,并传入tihs。我们看New函数的逻辑。...了解了new Worker的逻辑后,我们看在js层是如何使用的。我们看js层Worker类的构造函数。...总结,以上就是nodejs关于线程的基本原理,线程的实现也非常复杂,大致了解他的原理,才能更好地使用他。

70040

javascript模块系统

今天将会给大家介绍一下js模块系统。 CommonJS和Nodejs CommonJS是由Mozilla公司在2009年1月份提出来了。没错,就是那个firfox的公司。...: require([dependencies], function(){}); 第一个参数是依赖模块,第二个参数是回函数,会在前面的依赖模块都加载完毕之后进行调用。...加载的模块会以参数形式传入该函数,从而在回函数内部就可以使用这些模块。 require(["module", "...... */ }); require加载模块是异步加载的,但是后面的回函数只会在所有的模块都加载完毕之后才运行。 CMD CMD是SeaJS在推广过程模块定义的规范化产出。...这里的factory是一个函数,带有三个参数,function(require, exports, module) 我们可以在factory通过require来加载需要使用的模块,通过exports来导出对外暴露的模块

51111

javascript模块系统

今天将会给大家介绍一下js模块系统。 CommonJS和Nodejs CommonJS是由Mozilla公司在2009年1月份提出来了。没错,就是那个firfox的公司。...: require([dependencies], function(){}); 第一个参数是依赖模块,第二个参数是回函数,会在前面的依赖模块都加载完毕之后进行调用。...加载的模块会以参数形式传入该函数,从而在回函数内部就可以使用这些模块。 require(["module", "...... */ }); require加载模块是异步加载的,但是后面的回函数只会在所有的模块都加载完毕之后才运行。 CMD CMD是SeaJS在推广过程模块定义的规范化产出。...这里的factory是一个函数,带有三个参数,function(require, exports, module) 我们可以在factory通过require来加载需要使用的模块,通过exports来导出对外暴露的模块

53431

Js模块化导入导出

CommonJS CommonJS是NodeJs服务器端模块的规范,根据这个规范,每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。...所有依赖这个模块的语句,都定义在一个回函数,等到加载完成之后,这个回函数才会运行,RequireJS就是实现了AMD规范。...,不一样的地方是define的回函数需要有return语句返回模块对象(注意是对象),这样define定义的模块才能被其他模块引用;require的回函数不需要return语句,无法被别的模块引用...--> CMD CMD通用模块定义,是SeaJS在推广过程模块定义的规范化产出,也是浏览器端的模块化异步解决方案,CMD和AMD的区别主要在于: 对于依赖的模块,AMD是提前执行(相对定义的回函数..., AMD加载器是提前将所有依赖加载并调用执行后再执行回函数),CMD是延迟执行(相对定义的回函数, CMD加载器是将所有依赖加载后执行回函数,当执行到需要依赖模块的时候再执行调用加载的依赖项并返回到回函数

3K20

nodejsnodejs 入门实战教程 —— 从上传实例出发

(2)把某段代码变成模块意味着我们需要把我们希望提供的功能部分(function) 导出 到请求这个模块的脚本。 我们对上面server.js的代码做一次封装。...(2)以上我们所需要的参数&数据都包含在request对象,该对象是onRequest()回函数的第一个参数——request。...以非阻塞操作进行请求响应 “非阻塞”操作,是使用回,通过将回函数作为参数传递给其他需要花时间做处理的函数,例如“查询数据函数searchDB()”。...我们采用“非阻塞(异步回)”的方式处理: 首先,你需要明白的是,Nodejs为了使真个过程非阻塞,会将POST数据拆分成很多个小的数据块,然后通过触发特定的事件,将这些小数据块传递给回函数。...具体方案: 将data和end事件的回函数直接交由服务器处理,在data事件回收集所有的POST数据,当所有数据接收完毕之后,触发end事件,并且end事件的回函数调用“请求路由”,并将数据传递给请求路由

24220

JavaScript初级往高级走系列————ES6

问题: ES6模块如何使用,开发环境如何打包 Class和普通构造函数有何区别 Promise的基本使用和原理 总结一下ES6其他常用功能 ES6模块如何使用,开发环境如何打包 模块化的基本语法 /...CommonJS定义的模块分为: 模块标识(module)、模块定义(exports) 、模块引用(require) 在nodejs,exports 是 module.exports的引用,初始化时...module.exports = function(){ console.log('fn'); } exports对象是当前模块导出对象,用于导出模块公有方法和属性。...前端打包工具,使得nodejs模块化(CommonJS)可以被使用 ES6出现,想统一现在所有模块化标准 nodejs积极支持,浏览器尚未统一 你可以自造lib,但是不要自造标准!!!...resolve()和reject()就是为后面then()的两个函数服务的。

62510

NodeJs简单入门指南--搭建一个简单的http服务器(一)

好吧 既然想听干货,那我们下面就说说正题,搭建一个web服务器 在nodejs 基本上所有方法都依赖”模块“,nodejs中封装好了很多模块供我们使用 调用模块也很方便 利用require方法 将模块存到变量里...在nodejs,每一个js文件即使一个自定义模块,引入方法也很简单: var server = require("....,只会创建一个http服务器,但是他有且仅有一个回函数 从这里我们可以看到 nodejs里面会大量的用到callback 即回函数,熟悉javascript的童鞋应该会很熟悉,尤其是经常使用jquery...回函数字面理解就很容易理解的通,在我发送一条请求的时候,不会立即响应,而是在处理完成后调用此函数,此函数会返回结果。 那这个回函数有什么作用呢?...在这个回函数里我们看到有两个参数,req 和res 即request 和 response 翻译过来也很好理解了,请求和响应。 说到这讲点题外话,web服务器是如何工作的呢?

1.4K10

JS异步转同步组件——DeAsync.js原理深入分析

N-API是node v8开始支持的一种封装,它把node版本的底层差异抽象化,使我们可以无视nodejs的版本,用统一语法开发插件。...这里做一个简单的解释,最后一句NODE_API_MODULE,把init函数作为deasync模块导出,而前面的代码,给deasync注册了一个run方法。...下图显示了Nodejs的主体结构,在很多地方都能看到它。 Bt5ywJrIEAAKJQt.jpg 图上可以看出清晰的模块划分。 Application:应用层,即用户编写的代码。...如何理解最后两项呢? 用户代码在主线程执行,如果执行过程,遇到一个异步调用,js引擎就会封装一个请求对象,并且注册到线程池去。...在正常的js执行过程,主线程代码在结束之前,任何异步注册的回都不会执行。

6.9K61

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

Nodejs util 模块提供了很多工具函数。为了解决回地狱问题,Nodejs v8.0.0 提供了 promisify 方法可以将 Callback 转为 Promise 对象。...工作对于一些老项目,有 callback 的通常也会使用 util.promisify 进行转换,之前更多是知其然不知其所以然,本文会基本使用和对源码的理解实现一个类似的函数功能。 1....internal/util 模块导出的,仅内部调用,因此我们在外部 util.promisify 上是没有这个参数的。...也意味着只有 Nodejs 模块例如 dns.klookup()、fs.read() 等方法在多参数的时候可以使用 util.promisify 转为 Promise,如果我们自定义的 callback.../module/promisify 总结 util.promisify 是 Nodejs 提供的一个实用工具函数用于将 callback 转为 promise,本节基本使用 (err, result

2.3K10
领券