白告王旋的前端开发笔记——Node

这篇博客详细介绍了Node.js的相关知识,包括Node.js的官方API文档、nodemon自动重启工具、浏览器访问网站的过程、Node.js的特点、nvm-windows的使用、REPL交互式解释器、模块的使用、NPM包管理器以及各种核心模块如fs、os、url、events和http的使用。还探讨了模块系统,如require的使用和不同类型的模块。
摘要由CSDN通过智能技术生成

官网API文档

nodejs.cn/api

nodemon – 自动重启工具

npm install -g nodemon --save -dev

nodemon index

浏览器访问网站过程

  1. 在浏览器地址栏中输入网址
  2. 浏览器通过用户再地址栏中输入的URL构建HTTP请求报文
  3. 浏览器发起DNS解析请求,将域名转换为IP地址
  4. 浏览器将请求报文发送给服务器
  5. 服务器接收请求报文,并解析
  6. 服务器处理用户请求,并将处理结果封装成HTTP响应报文
  7. 服务器将HTTP响应报文发送给浏览器
  8. 浏览器接收服务器响应的HTTP报文,并解析
  9. 浏览器解析HTML页面并展示,在解析HTML页面时遇到的新的资源需要再次发起请求
  10. 最终浏览器展示出了页面

node.js 特点

  1. 事件驱动(当事件被触发时,执行传递过去的回调函数)
  2. 非阻塞I/O模型
  3. 单线程
  4. npm

nvm-windows 控制多个版本的node

  • https://github.com/coreybutler/nvm-windows
  • 常用命令
    • nvm version
    • nvm install latest
    • nvm install 版本号
    • nvm uninstall 版本号
    • nvm list
    • nvm use 版本号

REPL(交互式解释器)

R 读取:读取用户输入,解析输入了 Javascript 数据结构并存储在内存中

E 执行:执行输入的数据结构

P 打印:输出结果

L 循环:循环操作以上步骤直到用户两次按下 ctrl-c 退出

模块的使用

process 模块在使用的时候无需通过 require() 函数来加载该模块,可以直接使用

fs 模块在使用的时候,必须通过 require() 函数来加载该模块,方可使用

let fs = require('fs')

原因:process模块是全局模块,而fs 模块不是全局模块,全局模块可直接使用

request 和 response 对象介绍

request ( http.IncomingMessage ):服务器解析用户提交的 http 请求报文,将结果解析到 request 对象中,凡是要获取和用户请求相关的数据都可以通过 request 对象获取

request 对象常用成员

request.headers:返回的是一个对象,包含了所有的请求报文头
request.rawHeaders:返回的是一个数组,包含了所有的请求报文头的字符串
request.httpVersion:获取请求客户端所使用的 http 版本
request.method:获取客户端请求使用的方法(POST、GET...)
request.url:获取这次请求报文中的路径,不包含主机名称、端口号、协议

response ( http.ServerResponse ):在服务器端用来向用户做出响应的对象。凡是需要向用户(客户端)响应的操作,都需要通过 response 对象来进行

response.write()

response.end():结束响应(请求) ,告诉服务器该响应的报文头、报文体等等全部已经响应完毕了,可以考虑本次响应结束。res.end()要响应数据的话,数据必须是String类型或者是Buffer类型
res.setHeader():设置响应报文头,要放在res.write()和res.end()之前设置,即使我们不设置响应报文头,系统也会默认有响应报文头,并且默认发送给浏览器,当已经发送过响应报文头后,就不能再通过res.setHeader()设置请求报文头了
res.statusCode:设置 http 响应状态码
res.statusMessage:设置 http 响应状态码对应的信息
res.writeHead():直接向客户端响应写入 http 配置

res.writeHead('200','OK',{
   
	'Content-Type': 'text/plain; charset=utf-8'
})

res.writeHead()会替代 res.setHead()

NPM - Node Package Manager - Node包管理器

官网: https://www.npmjs.com

官方文档: https://docs.npmjs.com

更新 npm :

npm install npm@latest -g

模块(Modules)和包(Packages)的区别

模块可以是任何一个文件或目录(目录下可以有很多个文件),只要能被node.js 通过 require() 即可

包是一个文件或目录(目录下可以有多个文件)必须有一个package.json文件来描述,就是一个包

Package.json 文件介绍

package.json 文件中常见的项

name:包的名字

version:包的版本

description:包描述

author:包的作者

main:包的入口js文件,从main字段这里指定的那个文件开始执行

dependencies:当前包依赖的其他包

创建 package.json 文件

npm initnpm init -y

package-lock.json 文件中存放着 package.json 所有依赖包的信息

underscore的使用

官网:underscorejs.org

npm install underscore

node.js模块分类

  • 核心模块(内置模块,核心模块)

所有内置模块在安装 node.js 的时候就已经编译成二进制文件,可以直接加载运行(速度较快) 部分内置模块,在 node.exe 这个进程启动的时候就已经默认加载了, 所以可以直接使用。

fs, http, path, url…

  • 文件模块

如果加载时,没有指定后缀名,那么就按照如下顺序依次加载相应模块

.js .json .node(C/C++编写的模块)

  • 自定义模块(第三方模块)

mime, mongo, cheerio, moment

require 的使用

所有模块第一次加载完毕后都会有缓存,二次加载直接读取缓存,避免了二次开销

require 中的参数分为两种形式,相对路径下的文件,或项目名,查找顺序

  • 情况1: require() 的参数是一个路径

require(’./index2’)

index2.js -> index2.json -> index2.node -> (index2 文件夹 -> package.json -> main(入口文件 app.js -> index.js / index.json / index.node)) -> 加载失败

  • 情况2:require() 的参数不是路径,直接就是一个模块名称

先在核心模块中查找,是否有和给定名字一样的模块,如果有,则直接加载核心模块

如果核心模块没有改模块,就会认为这个模块是第三方模块(自定义模块)

先去当前 js 文件所在的目录下去找是否一个一个 node_modules 文件夹

模块包装函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值