【第三章—快速入门】《node.js开发指南》读书笔记

Node.js 入门:运行在服务端的 JavaScript 简介 Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。 Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。 简单的说 Node.js 就是运行在服务端的 JavaScript。 详细学习: 菜鸟教程 一、快速入门 Hello World 新建js文件 helloworld.js console.log("hello world!"); 终端执行文件(需在文件所. 阅读详情

第三章 Node.js快速入门

 

3.1.3 建立HTTP服务器

var http = require('http');
http.createServer(function(req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write('<h1>Node.js</h1>');
res.end('<p>Hello World</p>');
}).listen(3000);
console.log("HTTP server is listening at port 3000.");

 

3.2 异步式I/O与事件式编程

node的特点是异步编程式I/O(非阻塞),通过事件和回调来组织。

 

3.2.1 阻塞和线程

阻塞(同步式I/O):遇到硬盘读写或网络通讯(即I/O操作)停止线程的cpu控制权,让给其他的线程。等待I/O操作结束恢复cpu控制权,之后继续运行。

非阻塞(异步式I/O):遇到I/O操作发送给操作系统,继续运行下一条语句。当完成后以事件形式通知回去。线程必须有事件循环,不断检查没有处理的事件,依次处理。

阻塞只能一次处理一项任务。提高吞吐量只能通过多线程。非阻塞单线程即可胜任,他核心利用率会保持100%。

阻塞模式下多线程可以让 CPU 资源不被阻塞中的线程浪费。

而在非阻塞模式下,线程不会被 I/O 阻塞,永远在利用 CPU。多线程带来的好处仅仅是在多核 CPU 的情况下利用更多的核,而Node.js的单线程也能带来同样的好处。

单线程的好处:既然阻塞和非阻塞效果相同,那么为什么非要选择非阻塞+单线程呢?

因为操作系统创建线程是昂贵的,需要分配内存、列入调度,同时在线程切换的时候还要执行内存换页, CPU 的缓存被
清空,切换回来的时候还要重新从内存中读取信息,破坏了数据的局部性。 而单线程根本没这些烦恼。大大节约性能。

总结:如果一个工作的I/O操作远大于计算操作,那么非阻塞+单线程性能好很多。而web服务都是I/O操作很多的。

 

3.2.2 回调函数

使用回调函数实现异步。

var fs = require('fs');

//异步方式
fs.readFile('test.html','utf-8',(err,data)=>{
    if(err){
        console.log(err);
    }else{
        console.log(data);
    }
})

//同步方式
let data = fs.readFileSync('test.html','utf-8');
console.log(data);

 

3.2.3 事件

node.js所有异步I/O操作都会在完成时发送到事件队列,前面的fs.readFile和http.createServer都是通过eventEmitter实现的。

let Events = require('events');
let event = new Events.EventEmitter();

event.on('e',function(){
    console.log('a');
})

setTimeout(() => {
    event.emit('e');
}, 1000);

 

3.3 模块和包

模块(module)和包(package)是node.js的最重要的支柱。它用于拆分,封装,组合。

node.js模块基本遵从CommonJS标准。

 

3.3.1什么是模块?

模块是node.js程序基本组成部分,他可能是js代码,json或者编译的c++扩展。

 

3.3.2 创建模块

1.创建模块

使用exports公开接口,使用require获取。

exports只是module.exports的引用,如果你想要使用exports导出模块,千万不能给它赋值!

//m.js文件
var value = 42;

function sayHello() {
    console.log(value);
}

function setValue(v) {
    value = v;
}

exports.sayHello = sayHello;
exports.setValue = setValue;


//index.js
const m = request('./m');
m.sayHello(); //输出42

2.单次加载

request不会重复加载模块,无论调用多少次request加载的都是一个模块。

//index.js
var m1 = require('./m');
var m2 = require('./m');

m1.setValue(1);
m2.setValue(2);
m1.sayHello(); //输出2

 

 

由于书中的node.js版本太旧,3.34创建包和3.4调试已经不再适合现在的版本,所以不做记录。

Node.js入门指南:开启JavaScript全栈开发之旅 Hi,我是布兰妮甜!Node.js让JS突破浏览器限制,成为全栈开发利器。本文将带你快速掌握:环境搭建、HTTP服务、异步编程、Express框架和项目部署核心要点,助你轻松入门服务端开发。 阅读详情

相关推荐

前端必知:Node.js 基础入门指南

这篇文章的主要目的是帮助前端开发者快速了解和掌握 Node.js 的基础知识。我们会涵盖 Node.js 的基本概念、核心原理、实际操作步骤,还会通过具体的代码案例让大家看到 Node.js 在实际项目中的应用。范围主要集中在 Node.js 的基础内容,不会涉及过于高深的高级特性。接下来,我们会按照以下几个部分来详细介绍 Node.js:首先是核心概念与联系,用有趣的故事和生活实例引出 Node.js,解释它的核心概念以及它们之间的关系;然后是核心算法原理和具体操作步骤,会用代码来详细说明;

AI架构全栈开发实战笔记 1547

setvalue函数_常成员函数

1.常成员函数(定义来自 @阳光璀璨 的专栏) 成员函数有两类,修改对象状态的成员函数,获取对象状态的成员函数。 常成员函数就是一种获取成员状态的函数,并且不能改变对象状态(好智能的感觉)比如class temp { public: void setvalue(int a)const; int b; }; void temp::setvalue(int a)const { b=a...

weixin_39676242的博客 7864

掌握后端开发:Node.js与JavaScript的实践指南

本文还有配套的精品资源,点击获取 简介:后端开发是互联网应用程序的核心,负责服务器端逻辑、数据管理及用户验证。JavaScript,尽管常用于前端,也能在Node.js环境中实现后端功能。Node.js提供了一个异步、事件驱动的I/O模型,适合构建高性能应用。本项目“Back-End-main”演示了一个典型后端应用的结构,包括服务器文件、数据库连接、模型、控制器、中间件、...

weixin_42584507的博客 2167

《Node.js开发指南》读书笔记

继续学学node.js。翻开书首先被惊到=。=:作者BYVoid是清华大学2010级本科……同样是2010级本科,我真是无语凝噎,大学浪费了好多时间。不过过去的已经过去了,接下来好好努力提高才好,加油。在这之前,我已经看了一些其他的资料,对Node.js有了一些基本的了解。写了一篇博客 ,之后看了一本只有42也得入门书《Node入门》,这本书虽然很短,但是却是一本很不错的书。接下来开始看这本《No

Creabine的博客 2567

在PyCharm中配置使用Anaconda环境

在PyCharm中配置使用Anaconda环境一、步骤1.Anaconda2.PyCharm总结 一、步骤 1.Anaconda 如未安装Anaconda可至其官网下载,学习使用个人版就可以了。 下载地址:https://www.anaconda.com/products/individual 1、打开Anaconda Navigator,点击Environments可以看到anaconda中已经有了默认的“base”环境,其中包含了大多数我们会用到的包,在PyCharm中可以直接使用该环境,而无需自行下载

TuckX的博客 19万+

RK3588 EVB开发板原理图讲解【六】

该原理图展示了eMMC Flash与主控芯片之间的连接关系,以及相关的电源、信号线路和去耦电容等。

weixin_48721556的博客 1178

入门Node.js, 你应该阅读的书籍

说明 这里,没有哗众取宠,没错。通过阅读几本书籍,能把你带入门,就已经很不错了。 这个世上,从来没有哪本书能让你从入门到精通。因为精通只能通过在项目实战的不断积淀! 我以前是做前端开发的,在项目中,我负责前端网站的开发,同时,项目组配备了Java后台工程师。我们各做各的,相处得很好。突然一天,他提出离职。因为项目着急上线,来不及找到合适的人手。PM要接手他的后台Java代码,必须接,这...

悠悠 1万+

无刷电机控制避坑指南:六步换向 vs FOC的5个关键差异

本文深入对比了无刷电机控制中六步换向与FOC(磁场定向控制)的五大核心差异。从控制逻辑、性能表现、效率能耗、硬件成本到应用场景,详细解析了FOC如何通过矢量合成实现平滑的正弦波控制与更高效率,而六步换向则以低成本实现简单开关驱动。旨在帮助工程师根据项目需求,在性能、成本与复杂度间做出最佳选择。

weixin_29216957的博客 510

JavaScript 基础 - 第20天_Node.js入门

Node.js安装与使用

八年大厂一线老程序员。现独立开发创业中,并且已经靠独立开发赚取人生第一桶金。 2238

fpga的希尔伯特变换实现

fpga的希尔伯特变换实现零.实现背景一.希尔伯特实现的基本原理2.实现1)matlab仿真1)fpga滤波器实现实现成本:fpga实现采用VIvado的FIR的IP核, 零.实现背景 因为今明工作项目需要使用到希尔伯特变换来处理问题,所以顺便就把设计流程和代码都整理下来,以便供他人使用。选用Xilinx的7系列板子,Vivado平台。 一.希尔伯特实现的基本原理 希尔伯特变换的物理意义十分简单:...

weixin_42219690的博客 1万+

音频分割:长语音音频 分割为 短语音音频 - python 实现

音频分割:长语音音频 分割为 短语音音频 - python 实现

DATABALL 的博客 1207

【Node.js】快速入门

Node.js快速入门

weixin_45080950的博客 1297

基于强化学习的多无人机路径规划

我们使用了Dueling Double Deep Q-Network(DDDQN)算法来训练智能体,这个算法在深度Q学习算法的基础上进行了升级,具有更快的收敛速度和更好的性能。本文提出了一种基于强化学习的算法,实现了多无人机路径规划,并提供相应的MATLAB代码。通过基于强化学习的多无人机路径规划算法,我们能够高效地解决复杂环境下的任务需求,并在实际应用中取得了良好的效果。首先,我们定义了状态空间和动作空间。实验结果表明,我们的方法能够有效地解决多无人机路径规划问题,提高了任务完成的效率和准确率。

DjjPython的博客 821

Node.js快速入门

NPM全程:Node Package Manager,是Node.js管理工具,里面的所有模块都是开源免费的,也是Node.js的包管理工具,相当于前端的Maven#在命令提示符输入npm -v 可查看当前的npm版本npm -vES6的某些高级语法在浏览器甚至是Node.js环境中无法执行Babel是一个广泛使用的转码器,可以将ES6代码转换为ES5代码,从而在现有的环境执行这意味着,编写ES6程序不需要担心环境是否支持1.改写package.json//...//...},

qq_62892403的博客 1771

改进YOLOv9的CT图像肺结节检测与分类算法:从原理到实战

本文将详细介绍如何改进YOLOv9算法,使其更好地适应CT图像肺结节检测与分类任务。我们将从数据集准备、模型改进、训练优化到最终部署,完整呈现一个端到端的深度学习项目,并提供完整的代码实现。

YOLO 188

[Dify] -进阶13- 使用“知识库 + 工作流”打造智能推荐系统

本文介绍了在Dify平台上构建智能推荐系统的方法,重点阐述了知识库与工作流技术的结合应用。通过知识库管理RAG流程,实现文档上传、向量嵌入和检索优化;利用工作流设计节点化推荐逻辑,支持并行处理与条件分支。以电话销售话术推荐为例,展示了从数据收集到实时生成的完整流程。该方法具有准确性高、扩展性强、维护简便等优势,可广泛应用于各类推荐场景,实现从数据存储到智能推荐的闭环解决方案。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 1068

Node.js 学习入门指南

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,允许在服务器上使用 JavaScript 编写高性能网络应用。它提供了事件驱动、非阻塞I/O模型,使得开发人员能够编写快速且可伸缩的应用程序。Node Package Manager (npm) 是 Node.js 的默认包管理器。它使开发者能够轻松安装和共享JavaScript代码。通过本文的介绍,您应该已经掌握了Node.js的基础概念及其在Web开发中的应用方式。

2501_91537388的博客 1730

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Node.js NAN 模块开发指南

NAN(Native Abstractions for Node.js)是专为Node.js设计的一个库,它提供了简单且健壮的方式以桥接JavaScript代码和C++,特别是在利用V8引擎特性时。本指南旨在帮助开发者理解和操作NAN项目,确保能够顺利进行Node.js的底层扩展开发。 ## 1. 项目的目录结构及介绍 NAN项目遵循了典型的Node.js扩展项目结构,虽然其自身是一个库,但其...

gitblog_00877的博客 1302

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

《从零到全栈:Node.js入门指南--后端开发》

本文全面介绍了 Node.js 的核心知识点,涵盖环境搭建、文件系统、模块系统、Express 框架、路由分发、数据库操作等内容,并拓展了中间件、错误处理、文件上传和 WebSocket 等进阶知识。通过学习本文,开发者可以掌握如何使用 Node.js 构建高性能的后端服务,并了解如何优化和扩展应用功能。无论是初学者还是有经验的开发者,都能从中获得实用的 Node.js 开发技巧。

weixin_48036026的博客 1526

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

LX Music Desktop终极指南:免费开源跨平台音乐播放器的完整使用教程

你是否厌倦了各大音乐平台的会员限制?是否希望在Windows、macOS和Linux上都能享受免费的音乐体验?今天我要为你介绍一款完全免费、功能强大的开源音乐播放器——LX Music Desktop。这款基于Electron和Vue 3开发的跨平台软件,不仅支持多音乐源聚合搜索,还提供了桌面歌词、个性化主题、数据同步等专业功能,让你彻底告别音乐平台的付费束缚。 ## 从痛点出发:为什么你需要L

gitblog_00575的博客 766

Node Electron 开发快速入门指南

label: '文件',submenu: [{ label: '新建', accelerator: 'CmdOrCtrl+N', click: () => {} },{ role: 'quit', label: '退出' }},label: '编辑',submenu: [{ role: 'undo', label: '撤销' },{ role: 'redo', label: '重做' },{ role: 'cut', label: '剪切' },

卡尔特斯 1229

Node.js开发入门指南:从安装到高效编程的全流程解析

最新接入DeepSeek-V3模型,点击下载最新版本InsCode AI IDE 标题:Node.js开发入门指南:从安装到高效编程的全流程解析 在当今快速发展的软件开发领域,Node.js作为一种强大的JavaScript运行时环境,已经成为构建高性能网络应用的核心技术之一。然而,对于初学者来说,Node.js的安装和环境配置可能会显得复杂且耗时。本文将详细介绍Node.js的安装步骤,并结合智...

QuartzLynx65的博客 861

node.js快速入门指南

node.js 被称为是一个将设计网络应用导向正确道路的特殊工具,在某些场景下,比现有如Apache和Nginx这样的Web服务器性能还要好。浏览器是 JavaScript 的前端运行环境Node.js 是 JavaScript 的后端运行环境Node.js 中无法调用 DOM 和 BOM 等浏览器内置 API。

CarveStone的博客 802

Microsoft Node.js for UWP 入门指南

Microsoft Node.js for UWP 入门指南 项目介绍 Microsoft Node.js for UWP(Universal Windows Platform)是一个使Node.js(基于Chakra构建)能够在Windows 10上访问UWP API的项目。它尤其适用于那些希望在最新版本的Node.js中利用Windows 10特有的功能和接口的开发者。请注意,此项目不支持Wi...

gitblog_00374的博客 860

2.Node.js快速入门

Node.js笔记Node.jsNode.js安装快速入门创建测试工程使用函数使用模块创建http服务服务端渲染接收参数资源管理器NPM工程创建 Node.js 简单的说 Node.js 就是运行在服务端的 JavaScript。 Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。 Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。 Node.js安装 1、下载对应你系统的

小黑的博客 822

Node.js 入门指南:从零开始掌握服务器端JavaScript

还在为前后端技术栈不统一而烦恼?想要用JavaScript统一全栈开发却不知从何入手?本文将带你全面了解Node.js,从基础概念到实战应用,一文解决Node.js入门的所有困惑! **读完本文你将掌握:** - Node.js核心概念与运行机制 - 环境搭建与第一个Node.js应用 - 模块系统与包管理 - 异步编程与事件循环 - 常用内置模块实战 - Web服务器开发入门 - 调试与性能优...

gitblog_00220的博客 983
上一篇: setTimeout 的定义域问题
下一篇: 【第四章—核心模块】《node.js开发指南》读书笔记
崔佳宇_
崔佳宇_ 优质创作者: 嵌入式与硬件开发技术领域 优质创作者: 嵌入式与硬件开发技术领域
博客等级 码龄10年 1万+粉丝 173原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值