node.js的一些基本用法

node
为什么要学习node
动态网页:数据进行交互,动态改变数据
通过node了解前后端数据交互(后台如何返回接口)
node的版本
LIS稳定版本
10.15.2
大号版本
小号版本
补丁
nodeJs和浏览器中的JavaSrcipt的区别
在node中没有BOM和DOM的概念,所以不存在兼容模式
在浏览器中没有node中的global、paprocess等属性
node可以用来搭建服务器、数据库
node可以用来调用底层的API,可以做文件的读写等操作
node的优缺点
优点
高效、速度快、适合高并发的项目
缺点
不适合做大计算的项目
node的交互模式
进入
node回车
退出
ctrl+c/2次
ctrl+d/1次
node如何运行js文件
node 文件名
node搭建简单服务器
引入模块(node自带的是核心模块)
var http = require("http")
创建服务器
http.createSever((req,res)=>{}).listen(9000)
req用法
req.requset
请求
req.url
请求的地址
req.methed
请求的方式
req.headers
请求头
req.body
接收post传递数据的参数
req.query
接收get传递数据的参数
req.request()
接收任意方法传递数据的参数
res用法
res.write()
回复响应信息(可以多次调用)
res.end()
回复响应信息(只可以一次调用,做结尾)
res.statusCode
设置状态码
res.setheader
设置响应头
res.writeHead
前两者的综合写法
参数1:状态码
参数1:响应头
响应头的类型
text/plain
text/html
text/css
applieation
模块化
requireJS
异步
AMD
seaJs
异步
CMD
commonJs
同步
Common
Es6 module
同步
import
模块化规范
如何导出模块、如何接收模块
define-return-require
module.exports-require
export.defaule-import
node模板分类
核心模块
自带模块、直接导入
自定义模块
一般带“/”路径
第三方模块
先安装再引入
npm常用操作 [下载包]
cnpm.install.package.json
依赖安装
cnpm install <包名> -g
全局安装
cnpm install <包名> --save -dev
局部安装
cnpm uninstall <包名>
卸载
cnpm update <包名>
更新
cnpm clear cache
清除缓存
向npm官网上传包
创建项目文件夹
目录下打开cmd
npm init 回车到最后
创建文件
npm login (登陆npm账号)
npm publish (上传)
yarn
cnpm install yarn -g
yarn install
相当于cnpm install
yarn add <包名>
相当于cnpm install <包名> -S
yarn add <包名> -dev
局部安装
yarn upgrade <包名>
更新
yarn remore <包名>
删除+jh
day2
url模块
url.parse(path,true)
将url转成对象,参数为true时会将qurey解析成一个对象
url.format()
将一个url object转成一个字符串.url
url.resulve()
生成一个相对或者绝对路径[第二个参数加“/”时为绝对路径]
queryString模块
qs.escape()
转义
qs.unescape()
反转义
qs.parse(字符串,“分隔符”,“赋值符”)
字符串转对象
qs.stringify(字符串,“分隔符”,“赋值符”)
对象转字符串
events模块
on(eventName,cb)
事件绑定
setMaxlisteners(n)
设置最大可绑定的函数数量
removeListener(eventName,cb)
事件移除,必须在事件触发前
removeAllListener(eventName)
移除所有事件
emit(eventName,params)
事件触发,与on事件一致,并填写参数
http小爬虫
引入模块和路径[cheerio模块可以让我们操作数据像jq一样]
接收数据
接收数据是一块一块接收的,接收时会触发data事件
接收完毕后会触发data事件
将请求到的数据封装到$中
进行类似JQ的数据操作
fs模块
fs.stst()
校验文件类型
fs.stat("文件的路径",(err,stats)=>{if(!err){}})
子主题 1
stats.isFile()
验证是不是一个文件
stats.isDirectory()
验证是不是一个文件夹
fs.readFile()
读取文件内容
fs.readFile("文件的路径",(err,data)=>{})
返回值是一个buffer文件,加空字符串可以将其转化为字符串
fs.writeFile()
将数据写入文件
fs.writeFile("文件的路径","文件内容",(err)=>(){})
appendFile()
向文件追加内容
appendFile("文件路径",“追加的内容”,(err)=>(){})
fs.readdir("文件的路径",(err,data)=>{})
列出文件夹的目录
data
文件的目录信息,是一个数组
fs.rename()
更改文件或文件夹的名称
fs.renameeadFile("文件更改的名称",(err)=>{})
路由
根据用户请求的路径或参数返回不同的网页或数据
前端路由
根据路径的不同,渲染不同的页面,一般用来做单网页开发
后端路由
根据用户请求的路径或参数返回不同的页面或数据,一般用来定义接口
搭建服务器,通过if判断实现不同路径下读些不同的数据
day3
socket
概念
网络上的两个程序通过一个双向的通信连续实现数据的交换,这个连接的一端称为一个socket,建立网络通讯连接至少要一对端口号(sockte),socket本质是编程接口(API)。对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,即socket编程接口
Http是轿车,提供了封装或者现实数据的具体形式,socket是发动机,提供了网络通信的能力
socket的使用过程
服务器初始化socket,再与端口绑定,对端口进行监听(listen),调用accept阻塞,等待客户连接
客户端初始化一个socket,并连接服务器(connect),客户端发送数据请求,服务器连接并处理请求,再将数据回应给客户端,客户端读取数据,最后关闭连接,一次交互结束
socket的使用场景
聊天室、多人聊天
实时性比较高的消息推送
客户端与服务器之间的通信
聊天室逻辑
net模块
net所创建的服务器能持久储存数据,htp只能暂时存储
服务器
通过“connection”事件,建立与每个客户端的连接,并将每个客户端添加到数组中
通过“data”事件,接收客户端信息
通过数组的遍历,将消息发送给每个客户端
通过id当客户端断开消息时,将其移出数组
客户端
通过new net.Socket()创建客户端
通过readline模块在终端进行文件读写
通过setEncoding(“utf8”)将buffer文件转为字符串
通过“connect”方法连接服务器,参数为端口、ip地址
通过“data”事件,接收服务器的数据
通过“line”事件,在终端读写文件
WebSocket
允许服务器主动向客户端推送数据,只需完成一次握手,两者便可以创建持久性连接,并进行双向数据传输,(html5新增的通信协议)
socket.io
将WebSocket封装成一套API,屏蔽了细节差异和兼容性问题,实现了跨浏览器/跨设备进行双向数据通信
单页面与多页面开发的区别
单页面开发
spa,只有一张web页面的应用,有一个初始化页面和多个页面模块组成。
单页面跳转仅刷新局部资源,公共资源(js、、css等)仅需加载一次
页面跳转
使用js中的append/remove或show/hide的方式进行页面内容的更换
数据传递
可通过全局变量或参数传递,进行相互数据交互
优势
用户体验好
页面切换的数据传递、页面的切换的动画都有较大的操作空间
多页面开发
MPA,多页面跳转需要刷新所有资源,每个公共资源需选择加载
页面跳转
使用window.location.href进行页面的跳转
数据传递
通过路径携带的数据传递方式,或者localstorage.cookie等存储方式
优势
适用于页面跳转较少、数据传递较少的项目开发
非持久性连接和持久性连接
持久性连接
服务器在发出响应后保持TCP连续打开着,同一客户/服务器之间的后续请求和响应可以通过这个链接传递
非持久性连接
服务器每发送一个对象后,相关的TCP连接就被关闭,每个TCP连接只能传送一个请求消息和响应消息
socket运作流程
输入域名
DNS域名解析(将域名解析为IP地址)
找到相对应的服务器
TCP的三次握手(验证身份信息)
后面
找到相对应的资源库
返回相对的资源
对所有文件进行解析
将解析完毕的页面返回客户端
关闭页面同时进行四次握手
day4
环境变量配置
安装mongodb
创建data文件,再在目录下创建db文件
MongoDB=>bin打开cmd
输入mongodb -- dbpath.d:datadb(27017是成功)
复制bin的路径,粘贴到我的电脑、属性、高级、环境变量、path
桌面打开cmd,输入cmd、mongo、dbpath.d:datadb
数据库
关系型数据库
mtsql,收费。速度快、字段类型
非关系型数据库
mongodb,不收费、速度慢一点
MongoDB:基于分布式文件存储的数据库
mongodb操作
cmd:mongodb -- dbpath.d:datadb
开启数据库服务器
cmd:mongo
连接数据库
show dbs
查看服务器中有多少个数据库
use db_name
创建数据库
db.createCollection("表名")
创建表
db
查看当前使用的数据库
db.getCollection("表名")
使用表
db.getCollectionNames()
查看数据库中有哪些表
db.表名.save({key:val})
添加数据
db.表名.find()
查找数据
db.表名.update({key:val},{$set:{key:val},$inc:{key:val}})
修改数据
db.表名.remove({key:val})
删除数据
day5
Mongoose
是在node.js环境下对mongodb进行便捷操作的对象模型工具,是nodeJs提供链接mongodb的一个库,遵循一种模板式方法,能够对输入的数据进行自动处理
mongoose操作
引入mongoose模块
定义url地址,最后加上数据库名称
连接数据库mongoose.connect(url,(err)=>{})
创建表mongoose.model("表名",{字段类型的限制})

限制字段类型
创建数据
存入数据表save()

remove()

update({},{$set:{}}).then((res)=>{})

find()
当前路径生成新的绝对路径
引入path模块
path.join(__dirname,"xxx")
express:基于node.js平台,快速、开放、极简的web开发框架
可以设置中间件来响应HTTP的请求
定义了路由表用于执行不同的HTTP请求动作
可用过向模板传递参数来动态渲染HTML网页
express安装
npm install express -generator -g
全局安装
npm init -y
局部初始化
express -e
创建模板(出来文件夹)
npm install
下载依赖
npm start
服务器挂起
在json文件中,将node改成supervison
在public文件夹中创建index.html
浏览器打开127.0.0.1:3000

原文地址:https://www.cnblogs.com/zhangfangz/p/10606359.html