Node.js

1.Node.js概述

 Node.js是运行在服务器端的环境

 (1)对比JS

  JS运行在客户端浏览器,存在多种浏览器,存在兼容性问题Node.js运行在服务器端,只有V8引擎一种解释器,代码不存在兼容性问题。

  两者都有共同的自定义对象和内置对象(ES对象),不同的宿主对象

  JS用于操作浏览器的内容,实现用户交互Node.js用于服务器端开发,例如操作数据库,调用其它服务器

 (2)运行方式

  脚本模式

    node  拖拽文件    回车

  交互模式

    node    回车  进入交互模式

    退出交互模式    两次ctrl+c ctrl+d

 (3)特点

  属于单线程运行逻辑,不会产生死锁,支持数万个并发连接,适合做基于社交网络的大规模WEB应用

  不适合做CPU密集型应用

2.全局对象

 (1)global

  检测变量或者函数是否为全局的

  Node.js的交互模式下,属于全局作用域

  在脚本文件下,不属于全局作用域

 js下global名称为window

  (2)console对象

  提供了一组用于调试控制台的方法

  console.log(1); //输出日志

  console.info(2); //输出消息

  console.warn(3); //输出警告

  console.error(4); //输出错误

  console.time()   开始计时

  console.timeEnd()   结束计时

  开始计时和结束计时两者输出的值要保持一致

  (3)process对象

  进程:在计算机上开启的任何软件都代表进程

  process.arch   查看当前CPU架构

  process.platform   查看当前的操作系统

  process.version  查看当前Node.js的版本号

  process.pid   查看当前的进程编号

  process.kill()   结束指定编号的进程

 (4)Buffer对象

  缓冲区,缓冲存储器

  是内存中的一块临时存储数据的区域

  var buf=Buffer.alloc(5, 'abcde');//创建buffer,分配空间大小为5个字节,并存储数据

  buf.toString()  //将buffer转为字符串

 Node.js下每个汉字占三个字节

 

 

1.模块
require: 是一个函数,用于引入其他模块
module.exports: 导出的对象,默认是一个空对象要暴露的内容需要添加到对象中
__dirname:  获取当前模块的绝对路径
__filename: 获取当前模块的绝对路径+模块名称

2.模块的分类
模块分为三种:自定义模块、核心模块、第三方模块

                           以路径开头                                                                                                                                     不以路径开头

     文件形式模块      require('./circle.js')                                                                                                               require('querystring')

                  常用于引入自定义模块                                                                                                                  用于引入官方提供核心模块           

       目录形式         require('./demo-01.js')                                                                                                                require('tao')
                                                                                          
首先会找到目录下查找package.json 文件中main 对应的文件
                 如果找不到自动查找01.js                                                                                           首先会到当前目录下的node_modules目中寻找tao目录,用于引入第三方模块                                                                                                                                                                        如果找不到会一直往上一级目录的node_modules目录中寻找
 
3.包的npm
 包:指的是第三方模块,是一个目录模块
 npm:用来管理包的工具模块,属于是第三方模块,在Node.js安装时候已经附带安装
    npm  -v  查看npm版本
 CommonJS:是一种规范,制定了Node.js的模块规范
 网址: www.npmjs.com
 (1)切换命令行路径
   在要进入的目录的空白区域,按住shift,单击鼠标右键,选择“在此处打开powershell窗口”
  在cmd下
     cd  粘贴路径
     如果有盘符的切换,需要添加  盘符名称:
(2)npm命令
npm init -y 初始化一个package.json文件,记录下载安装的包 

npm install 包名称 下载安装指定的包,会将包放入到目前目录的 node_modules 目录下,如果不存在会自动创建;同时会生成 package-lock.json 的文件用于记录所有包的版本号,package.json中只是记录当前安装包的安装信息

npm install  自动下载package.json 和 package-lock.json中记录的包

4.查询字符串模块(querystring)

查询字符串:浏览器向服务器传递数据的一种方式,位于网址中
http://search.jd.com/Search?keyword=笔记本&price=4000
协议     域名或者IP    字符串查询
查询字符串模块:专门用于操作查询字符串的工具
parse()   将查询对象解析为对象

5.url
统一资源定位,互联网上的任何的资源(html.css.js,js,图像,视频,声音)都有相应的URL
http://www.codeboy.com:9999/product_details.html?lid=13#one
协议   域名或者IP地址   端口  文件在服务器的路径  查询字符串  锚点

6.定时器模块(timer)
(1)一次性定时器
开启
let timer=setTimerout(回调函数,间隔时间)
当间隔时间到了,会调用一次回调函数,间隔时间单位是毫秒
清除
clearTimeout(timer)
(2)周期性定时器
开启
let timer=setlnterval(回调函数,间隔时间)
每隔一段时间,调用一次回调函数
清除
clearinterval(timer)
(3)立即执行定时器
开启
var timer=setlmmediate(回调函数)
清除
clearlmmediate(timer)
开启
process.nextTick(回调函数)
没有清除

定时器的回调函数是在事件队列中执行,当程序执行完才会执行事件队列的回调函数

 

 
1.同步和异步
同步:在主程序中执行,会阻止主程序中后续代码的执行,通过返回值获取结果
异步:在一个独立的线程中执行,不会阻止主程序后续代码的执行,通过回调函数获取结果

2.文件系统模块 (fs)
文件分为目录形式和文件形式
(1)查看文件状态
 statSync(文件的路径)  / stat(文件的路径,回调函数);
 isDirectory()  是否为目录
 isFile()       是否为文件
(2)创建目录
mkdirSync(文件的路径)/mkdir(文件的路径,回调函数)
(3)移除目录
rmdirSync(文件路径) /rmdir(文件的路径,回调函数)
只允许移除空目录
(4)读取目录
readdirSync(文件路径)/readdir(文件路径,回调函数)
(5)清空写入文件
writeFileSync(文件的路径,写入的数据)/writeFile(文件的路径,回调函数)
(6)追加写文件
appendFileSync(文件的路径,写入的数据) /appendFile (文件的路径,回调函数)
如果文件不存在,首先创建文件然后写入数据
如果文件存在,会在文件的末尾追加写入数据
(7)读取文件
readfileSync(文件的路径)/readfile(文件的路径,回调函数)
(8)删除文件
unlinkSync(文件的路径)/unlink(文件路径,回调函数)
(9)检测文件是否存在
existsSync(文件的路径) 存在 return  true  不存在 return  false
(10)拷贝一个文件
copyFileSync(原文件路径,目标文件路径)/ copyFile(原文件路径,目标文件路径,回调函数)

3.文件流
creatReadStream()  创建可读取的文件流
creatWriteStream()  创建可写入的文件流
on(事件名称,回调函数) 一旦触发事件,自动调用回调函数,其中事件名称是固定的字符串形式
pipe()  管道,可以将读取的流添加到写入的流

4.http 协议
http:超文本传输协议
是浏览器和WEB服务器之间的通信协议

(1)通用头信息(general)
Request URL:请求的URL,要请求资源
Request Method:请求的方法,对资源操作的方式 get post....
Status Code :响应状态码
1**:已经接受到了部分请求,还没结束
2**:成功响应
3**:响应的重定向,发生跳转
4**:客户端错误
5**:服务器错误
(2)响应头信息(response)
Location:要跳转的URL通常结合状态3**使用
Content-type:响应的内容类型,可以解决中文乱码
text/html; charset=utf-8
(3)请求头信息(request)
(4)请求主体
只有在传递数据的时候才会出现

5.http模块
可以用来WEB创建服务器
WEB服务器:给客户端提供资源的服务器例如数据文件...
   创建WEB服务器
const app=http.createServer();
   设置端口
app.listen(8080,()=>{
    console.log('WEB服务器启动成功')
});
 添加事件,通过事件接受请求做出响应
 app.on('request',(req,res)=>{
     req 请求对象
     req.url获取请求的URL ,格式 '/xxxx'
     req.method 获取请求方法
     res 响应的对象
     res.writeHead() 设置相应到浏览器
     res.end() 结束并发送响应
 })
# 框架
定义:是一整套解决方案,添加了之前没有的功能,简化了已有的功能

# express 框架
基于 Node.js 平台,快速、开放、极简的 Web 开发框架
属于是第三方模块, 需要先去下载
npm install express

(1)创建WEB服务器
 引入第三方模块
 const express=require('express');
 创建WEB服务器
const app=express();
 设置端口
 app.listen(8080,()=>{
     console.log('启动成功');
 });

(2)路由
定义:为了接受浏览器端的请求,并作出响应;用户来处理特定的请求
路由三要素:请求的URL、请求的方法、回调函数
res             响应的对象
res.send()     设置响应的重定向并发送
res.sendFile() 设置响应的文件,要求使用文件的绝对路径
__dirname    

req            请求的对象
req.url        获取请的URL
req.method     获取请求的方法
req.query      获取get传递的数据,格式为对象

(3)传递参数的方式
传递方式                         格式                                                      路由中获取

get 传递             http://127.0.0.1:8080/mysearch?kw=dell                           req.query 格式为对象
                

post 传递                存在于请求主体,在URL中不可见                                  req.on('data',chunck=>{
                                                                                chunck获取的分段数据,格式为buffer需要转为字符串
                                                                                  转换后为查询字符串还需要进一步转为对象});


路由传参                  http://127.0.0.1:8080/package/express               app.get('/package/:pname',(req,res)=>{
                                  形参不可见(kw=pwd)                                    :pname  表示形参
                                                                               req.params 获取路由传参数据,格式为对象});

 

# 对比get和post请求方法

(1)get常用于获取,post用于往外传递数据

(2)get传递的数据通过URL,大小不能超过8k,post通过流的方式,没有大小限制

(3)get传递的数据比较快,post传递的比较慢

(4)get传递的数据会暴露在URL中,容易被浏览器缓存,不安全;post传递的数据不会被浏览器缓存,相对安全。

(5)get传递数据常用于搜索等... post传递数据常用于注册、登录...

2.路由器

 路由器用来管理路由,将同一个模块下的所有的路由归纳到一起;最终路由器被WEB服务器所使用

1.路由器const express=require('express');//引入express

const r=express.Router();//创建路由器对象//添加路由

//导出路由器对象module.exports=r;

2.WEB服务器//引入路由器//使用路由器,

给所有的URL添加前缀/userapp.use('/user',userRouter);

 

3.中间件

 中间件用于拦截对WEB服务器请求,也可以做出响应

 中间件分为应用级中间件、路由中间件、内置中间件、第三方中间件、错误处理中间件

 中间件可以扩展express的功能

 (1)应用级中间件

  就是一个函数,一旦拦截到会自动调用这个函数

 # SQL注入:在要拼接的用户提供的值中加入特殊字符,破坏原来的SQL命令。

使用占位符可以防止SQL注入

占位符:对所有客户端提供的值进行过滤,过滤完以后替换占位符

createConnection()  创建一个连接

createPool()  创建连接池,多个连接

query(SQL命令,要过滤的数据,回调函数)   执行SQL命令

2.RESTful接口

 接口:后端为前端提供的动态资源(对数据的增删改查)

 RESTful  是一种接口的风格

 测试接口工具:apipost 

 下载地址:www.apipost.cn

 (1)接口地址——URL

  员工资源emp

  http://127.0.0.1:8080/v1/emps      

                   版本号  资源名称(复数形式)

  http://127.0.0.1:8080/v1/emps/5

                                                  编号   获取单个资源

  http://127.0.0.1:8080/v1/users/login  对资源的特殊操作

 (2)请求方法

  get    获取资源(获取数据)

  post   新建资源(插入数据)

  delete 删除资源(删除数据)

  put    修改资源(修改数据)

 (3)过滤数据

  针对于多个资源的操作

  http://127.0.0.1:8080/v1/emps?pno=1&count=10

  按照页码过滤                            页码    每页数据量

  http://127.0.0.1:8080/v1/emps?salary1=4000&salary2=8000

  按照工资过滤

 (4)返回结果

  格式为json,字符串形式的对象,属性名必须用双引号,属性值是字符串也是双引号

  包含状态码、消息、数据

  例如:返回登录的结果

   {"code":200, "msg":"登录成功"}

  例如:获取员工的列表

   {"code":200, "msg":"查询成功", "data": [ ]}

3.错误处理中间件

  在所有路由的最后

  app.use( (err,req,res,next)=>{

     //err,错误信息

     res.status(500).send({code:500, msg:'服务器端错误'});

  } )

   

# 正则表达式
test()检测是否符合规则
match() 查找所有匹配的
repalce() 查找并替换
/我草|卧槽|wocao/ig
i 忽略大小写
g 找出所有的

正则表达式学习内容:https://pan.baidu.com/s/1MvzutFpYkYmqj9CdKkn4-g 提取码:hsdq
常用的正则表达式:http://www.codece.com/archives/270

字符集[]
范围
预定义字符集   \d
量词 { }
特殊位置  ^ (开始)   $(结尾)
选择  |
函数  
test()检测是否符合规则
match() 查找所有匹配的
repalce() 查找并替换
 
# VCS 系统

版本控制系统,用于项目的存储、共享、合并、历史回退、代码追踪等功能
常用的VCS软件
CVS:2000年以前
SVN:2010以前
Git:2010年至今

# Git中常用的概念

工作区:是一个目录,用于保存项目中的文件
暂存区:是内存中一个区域,用于临时存储项目文件的修改
Git仓库:是一个特殊的目录保存项目中所有的文件以及每次修改的记录

# Git常用的命令

(1)第一次使用这个软件之前,要告诉Git你是谁
git config --global user.name "自定义的用户"
git config --global user.email "用户邮箱"

(2)创建一个Git仓库用来管理当前的项目
git init
会在当前的目录下生成一个.git目录,会记录保存项目的历史

(3)查看当前Git系统的状态
git status

(4)将指定的文件添加到暂停区
git add 文件名称
git add . 将所有新文件或者修改的文件添加到暂停区

(5)将暂存区的文件提交到Git仓库
git commit -m "提交说明"

(6)查看Git仓库中所有的提交日志
git log

git reflog 查看所有的提交日志 、回退记录...

(7)历史回退
git reset --hard  提交的ID

(8)忽略文件
有些文件不需要Git系统来管理,可以忽略
使用任意的编辑器创建文件.gitignore 要忽略的文件写进去

# 分支
在不影响主线的开发的前提下分离出来的,目的是为了并行开发,最后分支都要进行合并.默认只有一个主分支 名称为 master

(1)创建新的分支
git branch 分之名称

(2)查看所有分支
git branch 

(3)切换分支
git checkout 分之名称

(4)合并分支
git merge 分支名称

出现以上情况:Esc ,右下角输入 :q

(5)删除分支
git branch -d 分支名称  删除已合并分支

git branch -D 分支名称  强制删除分支

# 远程仓库

gitee.com 码云,国内最大的

github.com 全球最大的代码托管平台

先创建远程仓库
git push 仓库地址 分支名称  把本地仓库推送到远程仓库
删除以保存的账号密码
控制面板-> 凭据管理器->Windows凭据

git clone 仓库地址  下载仓库到本地

git pull 仓库地址 分支名称 拉取到本地(前提有仓库了)
posted @ 2021-09-17 19:54  野居青年  阅读(229)  评论(0)    收藏  举报
/*鼠标跟随效果*/ /* 点击爆炸效果*/ /* 鼠标点击求赞文字特效 */