Node.JS学习笔记: 基础篇

2023-11-17

基础概念

三大件: 浏览器,服务器,数据库
1. 浏览器
在这里主要是关注浏览器的作用是发送请求,比如发送一个HTTP请求:“喂,把/index.html的文档发给我。”至于如何发送请求,服务器又如何处理请求。这方面需要HTTP,TCP/IP的知识,这里就不细说了。
2. 服务器
根据《HTTP权威指南》描述,服务会做七件事:

步骤 个人描述
建立连接 就像有人打电话过来,决定接电话还是挂机
接收请求 既然接电话了,那么就得搞清楚对方想干嘛,即读取一条报文
处理请求 嗷,你要XX文件啊。我马上给你去找。即解释报文,并采取行动
访问资源 然后,我开始翻桌子,柜子找啊找。那个“index.html”文件在哪里啊,在哪里?
构建响应 找了一会儿后,嘿,找到咯或者是唉,没在我这儿要不你问问XX吧。即构建响应200,404,303之类的响应报文
发送响应 哦,上一步应该是在脑袋里加工的步骤,这一步才是告诉对方找到了么。
记录事务处理过程 接着记下笔记,今天,某某什么时候找我要文件,文件找到了,并发给了他。即日志记录

3. 数据库
这一部分我的学习,还未涉及。
在底层I/O操作,Node.JS是多线程的,只是对于开发者而言,所有的开发都是单线程的。

模块

导入模块:
var foo1 = require(‘./foo’); // 导入外部模块
var http = require(‘http’);
var data = require(‘./data.json’);
模块的路径解析规则是按照: $HOME/node_modules, /home/node_modules, ./node_modules
导出模块:exports, module.exports
前者是后者的一个引用,详细区别参考: exports 和 module.exports 的区别 - CNode技术社区

Event Loop

说到Event Loop就得提及异步。参考一是stackoverflow上频率高的JavaScript问题。其中提到 document.onload, setTimeout, $.post(jQuery), I/O操作这些都是异步操作,在异步操作中改变主线程的变量,在后续代码中console.log发现该变量还是undefined。
原因在于异步,代码是按照调用栈进行执行的.当遇到异步操作时,异步操作会被放进队列中。回调函数,在主调用栈执行完后,按照队列的顺序执行。
参考一: asynchronicity
参考二: Concurrency model and Event Loop - JavaScript | MDN
参考三: JavaScript 运行机制详解:再谈Event Loop - 阮一峰的网络日志

创建一个web应用

前面提到服务器需要做七件事,那么我们使用Node.JS创建服务器应用就得实现这些功能。
一个Node.JS的应用分为三个层次:
1. 应用逻辑层次
2. 公共模块层次
3. Node核心层次

以下为Node入门 » 一本全面的Node.js教程的学习笔记,这里没有直接转载代码。没有阅读该文章是无法弄清,下面乱七八糟的笔记的。

HTTP

创建一个web应用,我们要用到的核心层次HTTP模块。

var http = require('http');
http.createServer(function(req, res){
  res.end('Hello World');
}).listen(3000);

保存为server.js运行。
至于构建头文件,响应文件之类的,这里就不细说了。

对于上面的应用,不同URI响应是相同的。
于是考虑到,构建不同响应驱动的服务。

处理不同的请求

增加一个新模块为router.js,创建index.js主文件集中处理应用逻辑。
将各个模块导入index.js中

var server = require("./server");
var route = require('./router');

各个模块的执行顺序或者说调用栈分别为:index.js (route函数, handle对象)(前面括号里为传递的对象,后面省略此说明) -> server.js (handle, pathname) -> router.js -> requestHandlers.js
出栈: router.js 返回结果 -> server.js

事件响应,异步编程

运行前面完成web应用,当应用同时收到请求时,先来的请求会阻塞后来的请求。
为了防止阻塞,那么将请求转化为异步操作。
现在调用栈改为:server.js (handle, pathname, response) -> router.js (response) -> requestHandlers.js.
利用异步函数的回调来处理用户的响应。

处理POST

requestHandlers.js start()返回一个form页面
requestHandlers.js upload() 处理form。
方法一: 将post数据在server.js里面处理,传递值给requestHandlers.js
server.js 修改分为三步: 1) 数据编码 2)整合数据 3) 监听end事件,发送数据给router.js
在requestHandlers.js upload() 里处理数据

处理文件上传

使用模块formidable
在requestHandlers.js里面增加show(), 以及修改start()。
在server.js里面不再处理response,将response传递给requestHandlers.js 处理。

写到后面感觉到虎头蛇尾,基本是摘抄基本没啥干货。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node.JS学习笔记: 基础篇 的相关文章

随机推荐

  • 变分推断学习

    https zhuanlan zhihu com p 401456634 变分推断 1 变分推断的背景 在机器学习中 有很多求后验概率的问题 求后验概率的过程被称为推断 Inference 推断分为精确推断和近似推断 精确推断一般主要是根据
  • H5播放之Rtsp转Websocket点播录像抓拍

    H5播放之Rtsp转Websocket点播录像抓拍 HLS的延时 websocket播放 实现思路 广大网友们 很久没上CSDN了 暨上次RTSP转HLS文章发布以来 一直还有一个问题没有解决 如何避免HLS切片带来的不可避免的高延时 HL
  • 浅谈PCA 人脸识别

    前几天讨论班我讲了基于PCA的人脸识别 当时我自己其实也只是知道这个算法流程 然后基于该算法利用c 实现了 效果还不错 后来跟师兄一起讨论的时候 才发现这个PCA还是有相当深刻的意义 PCA的算法 矩阵C AAT A的每一列是一张人脸注 将
  • Java的基础语法

    1 关键字介绍 1 Java 中一些赋以特定的含义 用做专门用途的字符串称为关键字 keyword 2 所有Java关键字都是小写英文字符串 2 Java变量 1 Java变量是程序中最基本的存储单元 其要素包括变量名 变量类型和作用域 2
  • c语言用指针找最大数,C语言,用指针。求输入20个数,依次输出这几个数,求最大值,最小值。...

    满意答案 yuab0p0dpi3 2013 11 22 采纳率 53 等级 13 已帮助 13064人 include include define LENGTH 20 void main int pBuff int malloc size
  • FTTR(Fiber To The Room)组网详解

    FTTR Fiber To The Room 是一种新型的光纤宽带接入技术 主要用于宽带网络覆盖范围有限 带宽瓶颈较严重的酒店 公寓 医院等场所 FTTR技术可以将光纤信号传输到用户房间内 实现高速 稳定的网络接入 提高用户体验 下面我们详
  • Python的最大递归深度

    import sys old sys getrecursionlimit print old 1000 可能是个估计值 我不清楚我没查 报错范围总是比限制要小2 我的电脑上 我不知道为什么 感兴趣可以查一查 sys setrecursion
  • Anaconda的使用

    1 anaconda介绍 Python虽然是一门优秀的程序语言 但其拥有出色的数据处理能力 尤其是在数据量巨大的时候 因而也吸引了不少数据分析人员的关注和使用 Python的数据处理能力主要依赖于NumPy SciPy Matplotlib
  • 在Maven中前端构建实践

    NodeJS为前端技术的发展带来了一次革新 层出不穷的前端库 框架以及打包工具让大家应接不暇 然而这使得前端技术越来越依赖于NodeJS 基于NodeJS编写的前后台项目可以使用同一编译或者打包工具进行管理从而做到无缝的前后端版本控制以及联
  • JSON和xml的区别

    首先 json和xml都是在远程调用或者和某公司合作时的数据交换格式 json和xml的区别 有什么优缺点 ajax 的 和json优缺点 相同点 json与xml是一种远程数据传输交换格式 json是轻量级的 xml标记电子文件具有结构性
  • Fsm serial

    In many older serial communications protocols each data byte is sent along with a start bit and a stop bit to help the r
  • 计算机组成原理-8、总线与输入输出系统

    前言 最近备研学习计算机组成原理的一些笔记 记得比较仓促 仅供个人参考 等明年会仔细结合自己的一些看法加以改进 如有不足之处 还请多多指教 文章目录 总线与输入输出系统 总线与输入输出系统概述 总线 总线类型与结构 总线的信息传输方式 总线
  • 操作系统实验三:用PV操作实现司机售票员进程同步(C语言实现)

    代码如下 driver spy cpp include
  • Docker + Jenkins 详细安装步骤

    一 安装Docker 1 安装依赖环境 yum y install yum utils device mapper persistent datalvm2 2 配置Docker镜像源 yum config manager add repo
  • 调试osgEarth(33)分页瓦片卸载器子节点的作用-(3)渲染遍历的帧号和时间设置-TerrainCuller赋值给可渲染图层--TerrainRenderData--深度摄像机

    继续调试 可见 在当前环境下 definelist为空 不会再有 OE IS DEPTH CAMERA 因此不是深度摄像机 果然为false 总结下 这里是通过摄像机的状态集的 definelist是否包含 OE IS DEPTH CAME
  • 论文阅读-多任务(2020)-KL4MTL:用于多任务学习的知识蒸馏方法

    KL4MTL 论文 Knowledge Distillation for Multi task Learning 地址 https paperswithcode com paper knowledge distillation for mu
  • 应用MATLAB求解线性代数题目(五)——特征值与特征向量

    目录 特征值和特征向量 相似矩阵 orth 将矩阵正交规范化 特征值和特征向量 我们先看一下特征值和特征向量的定义 可见 特征值可以通过特征方程 行列式 求得 则特征值与特征向量只存在于方阵中 根据MATLAB中的帮助文档 help eig
  • myeclipse 2019.4 使用

    在下主张开源 链接 https pan baidu com s 1953feWjM8p67LGl lLu9fg 提取码 o3d8 如有失效 请联系 QQ 1193754711 积分不富足的共同进步 在下需要积分 https download
  • 计算机网络第2章(物理层)

    计算机网络第2章 物理层 一 物理层的基本概念 二 物理层下面的传输媒体 2 1导引型传输媒体 2 2非导引型传输媒体 三 传输方式 3 1串行传输和并行传输 3 2同步传输和异步传输 3 3单向通信 双向交替通信 双向同时通信 四 编码与
  • Node.JS学习笔记: 基础篇

    基础概念 三大件 浏览器 服务器 数据库 1 浏览器 在这里主要是关注浏览器的作用是发送请求 比如发送一个HTTP请求 喂 把 index html的文档发给我 至于如何发送请求 服务器又如何处理请求 这方面需要HTTP TCP IP的知识