Node.js简要知识点

Node.js

node基础

一、Node.js简介

1.node的简介

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。

Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。

Node.js使用的是CommonJs规范。

Node.js主要应用于服务端,主要用来操作文件和创建http服务及进程操作。

(tip:是 Node 选择了 JavaScript,不是 JavaScript 发展出来了一个 Node。)

2.NodeJs安装

下载最新版本号:14.5.0

运行 node 文件名.js

常用命令

cls 清屏
dir 列出当前目录下的所有文件
cd 目录名 进入到指定的目录
md 目录名 创建一个文件夹
rd 目录名 删除一个文件夹(只能删除空文件夹)
cd … 返回上层目录
cd 命令,就是change directory的缩写,表示更改当前目录

3.Node.js的特点

单线程、 非阻塞 I/O 机制、事件环机制

tip:请不要使用var定义变量以避免引入全局变量,因为全局变量会污染命名空间,提高代码的耦合风险。

二、Buffer

1.概念

Buffer模块是Node的核心类库,提供了一种原始的数据存储方法(即二进制形式存储数据)。注:虽然Buffer的存储方式为二进制,但其输出的表现形式为十六进制。

2.初始化
▲Buffer.alloc

Buffer.alloc(size[, fill[, encoding]]),创建一个指定大小的Buffer,如果没有设置 fill,则默认填满 0;

let buf1 = Buffer.alloc(3);
let buf2 = Buffer.alloc(3,”q”,”utf-8”)
▲ Buffer.from

Buffer.from(string[, encoding]) 将一个字符串转换为buffer

let buf3 = Buffer.from("www")
3.Buffer 缓存区的输出
▲ buf.toString()

buf.toString([encoding[, start[, end]]]) 将缓冲区中的数据以字符串的形式读取

const buf = Buffer.from(I am teacher’,UTF-8);
console.log(buf.toString(‘hex’));
console.log(buf.toString(‘base64’));
console.log(buf.toString(utf8));
▲buf.write()

buf.write(string[, offset[, length]][, encoding])将字符串写入缓冲区

let buf = Buffer.alloc(256);
let len = buf.write(I am teacher”);
console.log(“写入字节数 :+ len); // 写入字节数 : 14
▲buf.toJSON()

buf.toJSON()将缓冲区中的数据转换为Json格式

const buf = Buffer.from(12345);
const json = buf.toJSON()
console.log(json);// 输出: { type: ‘Buffer’, data: [ 49, 50, 51, 52, 53 ] }
4.将缓存区进行合并

Buffer.concat(list[, totalLength])合并缓存区并生成一个新的缓存区,list合并的列表(数组形式)

var buffer1 = Buffer.from((‘大家好’));
var buffer2 = Buffer.from((I am teacher’));
var buffer3 = Buffer.concat([buffer1,buffer2]);
console.log(“buffer3 内容:+ buffer3.toString());
5.返回缓存区的长度

buf.length 返回缓存区被占用的长度

三、MIME的定义

MIME是多用途互联网邮件扩展类型。这是HTTP协议中用来定义文档性质及格式的标准。服务器通过MIME告知响应内容类型,而浏览器则通过MIME类型来确定如何处理文档。

MIME的常见类型
  1. 超文本标记语言文本 .html text/html
  2. xml文档 .xml text/xml
  3. XHTML文档 .xhtml application/xhtml+xml
  4. 普通文本 .txt text/plain
  5. RTF文本 .rtf application/rtf
  6. PDF文档 .pdf application/pdf
  7. PNG图像 .png image/png
  8. Microsoft Word文件 .word application/msword
  9. GIF图形 .gif image/gif
  10. JPEG图形 .jpeg,.jpg image/jpeg
  11. css文件 .css text/css
  12. Json文件 .json application/json
  13. JS文件 .js text/JavaScript

express框架

一、express的简介

​ express是基于nodejs开发的一个框架,便于加快项目开发,有利于团队协作

二、express的使用

1.express的初体验
(1).引入模块

​ var express=reuqire(‘express’)

(2)创建web服务器

​ var app=express();

(3).路由

​ app.get(’/ ',function(req,res){

​ send();响应字符串,自动识别

​ end();响应字符串,会乱码

​ render();响应字符串,自动识别,只能打开指定文件字符串并相应,只能配合模板引擎使用

})

(4).启动服务

​ app.listen(9000,function(){

})

2.express 引入模板 ejs
●ejs简介

ejs是一个Javascript模板库, 用来从JSON数据中生成HTML文件,特点是它是纯JavaScript,便于快速开发,执行迅速,语法简单,同时支持前后端环境,更贴近于HTML标签语法

●步骤一安装
【art模板安装】

npm install art-template,npm install express-art-template

【ejs模板安装】

npm install -g express-generator

express --view=ejs [文件名]

//在view文件夹中以HTML文件显示在app.js文件设置设置

app.engine(‘html’,require(‘ejs’).renderFile);

app.set(‘view engine’, ‘html’);

//view文件中以ejs结尾属性,在app.js文件设置设置

app.set(‘view engine’, ‘ejs’);

●ejs模板文件内标签定义

<% %> 用于流程控制,无输出

<%= %>输出数据到模板(输出是转义HTML标签)

<%# %>ejs的注释,不执行不输出,使用了ejs模板,HTML文件在模板中原先的注释不能使用须使用ejs的注释

<%- include %>包含,eg. <%-include(‘footer.html’)%>

三.路由

◆请求报文和响应报文

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eEBl6KBF-1596450463644)(C:\Users\thinkpad\Desktop\前端\搜狗截图20200723234612.png)]

HTTP 请求报文由请求行、请求头部、空行 和 请求包体 4 个部分组成;
HTTP 响应报文由状态行、响应头部、空行 和 响应包体 4 个部分组成;

◇http请求类型:

get、post、put、delete

◇app.http请求类型(请求路径/:参数名/…,回调)

特性:get只能接受get请求,post只能接受post请求,all都可以接受

◇app.use

匹配所有类型请求,use非完全匹配(只需要URL前面匹配请求路径即可匹配)

◆中间件
定义

中间件是http请求中的过滤层

中间件是可以访问请求对象,响应对象以及next应用程序请求-响应周期中的函数,使用app.use()来使用/定义中间件

(路由参数声明交给哪个方法处理,交给那个方法处理前,先交给另一个方法处理,在nodejs中用app.use调用)

路由中间件

中间件匹配成功后将不再继续匹配,如若想要继续,需要next();

中间件错误处理

404页面:上面都匹配不成功,最终走404中间件

错误统一处理:第一步回调函数加next,第二部next(err)

第三方中间件

cookie-parser:解析cookie
ejs:ejs模板
express-session:解析session
http-errors:错误中间件处理
Moment:日期时间处理
Morgan:日志打印
Multer:文件上传
Nodemon:热更新
config-lite: 读取配置文件

四.express 具体使用

1.cookie和session
◆cookie和session的安装

cookie:npm i cookie-parser

session:npm i express-session

◆cookie和session的区别

session是区别于数据库存在的一种服务器临时存储技术, 它主要存储一些无需持久化的数据, 比如临时的登录状态信息等
cookie是存在于浏览器上的一种浏览器本地存储的方式, 同域名下的cookie不同标签页可以共享, 默认过期时间是浏览器关闭时, 而且在进行http请求时, 会自动带上浏览器全部的cookie发给后台, 后台也可以获取cookie, 设置可以在响应时, 想浏览器中设置cookie。

◆cookie的用法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JuFx22Iq-1596450463652)(C:\Users\thinkpad\AppData\Roaming\Typora\typora-user-images\image-20200727200103780.png)]

var express = require('express');//引入express模块
var cookieParser = require('cookie-parser');
var app=express();//创建app对象
app.use(cookieParser('aaa'));//使用cookie-parser中间件,传入aaa签名进行加密


res.cookies('key','value',option)

option 要求是json格式,可选项是

domain:域名

expires:过期时间(秒)

maxAge:最大失效时间(毫秒)

secure:true:cookie在http中是无效的,在HTTPS才有效

path:表示路由路径,表示匹配对应的路径给这个发送cookie

httpOnly:默认值为false,true:客户端将无法通过document.cookie读取到cookie信息,防止 XSS 攻击

signed:是否加密,true:加密,后续需要使用res.signedCookies访问,false:未加密则用 res.cookies 访问

获取cookie res.cookies.key

清除cookie res.clearCookie(键)

在express中如何给cookie设置过期时间

通过设置expires和max-age,expires是日期时间类型,max-age是number类型

Res.cookie(name,value,{

expires : new Date(Date.now()+1000*60)

maxAge : 1000*60

})
◆session的用法
var session=require('express-session')
//初始化session
app.use(session({
    secret:'str',//加密存储
    resave:false,//客户端并行请求是否覆盖:true是;false否
    saveUninitialized:true//初始化session存储
    
}))

option的常用可选项有

name:用来设置在res中的或是来自req的cookie的session id的名字

resave:强制将会话保存回会话存储,即使在请求期间从未修改过会话也是如此。(默认值为true,但已弃用默认值,因为将来会更改默认值。)建议设置为false

cookie:设置session id为cookie的对象,

cookie:{
    path: '/', 
    httpOnly: true,
    secure: false,
    maxAge: null 
}

secret(必要的):用于加密存储

saveUninitialized:强制将“未初始化”的会话保存到存储中。选择false对实现登录会话,减少服务器存储使用或遵守设置cookie之前需要获得许可的法律很有用。 选择false还将有助于解决争用条件,即客户端在没有会话的情况下发出多个并行请求。默认值为true,但已经弃用默认值,可依旧案例选择;

设置:req.session.键=值

app.get('/set',function(req,res,next){
    res.session.a=2;
})

获取:req.session.键

app.get('/get',function(req,res,next){
    res.session.a;
})

清除:req.session.键=null

app.get('/del',function(req,res,next){
    res.session.a=null;
})
2.get和post获取数据

get中 req.query获取;post中req.body获取

GET和POST提交的参数格式是Urlencoded格式的编码类型

request对象常用属性

req.body:用于获取post,put等请求的参数,配置express.json和express.urlencoded解析post请求的参数

req.params:用来获取路由动态参数中的内容

req.query:获取url中的查询字符串,一般用于解析get请求的参数,配置querystring中间件可以将urlencoded与json对象互转;

req.cookies:用于获取用户提供cookies内容,配置cookie-parser解析cookie

req.signedCookies:用于获取用户加密的cookies内容,配置cookie-parser解析signedCookies,需要提前设置加密的字符串

req.path:获取url请求中的路径,注意不是host,port或query,仅仅是路径,可以手动实现路由功能

response对象常用属性

res.cookie():给客户端设置cookie内容,如果是加密cookie则需要配置cookie-parser

res.clearCookie():清除cookie内容

res.set():设置响应head信息,如content-type,content-lenght等

res.end():结束请求响应循环

res.json():给客户端发送json数据

res.jsonp():给客户端发送jsonp数据,默认是名称callback

res.send():发送数据给客户端,可以是字符串,json对象或buffer

res.redirect():重定向页面,重定向请求

res.render():渲染指定模板给客户端

res.sendFile():将文件作为八位字节流发送

res.status():设置响应header状态码

res.sendStatus():同样是设置响应header状态码,它等同于send + status两个方法的链式操作

端设置cookie内容,如果是加密cookie则需要配置cookie-parser

res.clearCookie():清除cookie内容

res.set():设置响应head信息,如content-type,content-lenght等

res.end():结束请求响应循环

res.json():给客户端发送json数据

res.jsonp():给客户端发送jsonp数据,默认是名称callback

res.send():发送数据给客户端,可以是字符串,json对象或buffer

res.redirect():重定向页面,重定向请求

res.render():渲染指定模板给客户端

res.sendFile():将文件作为八位字节流发送

res.status():设置响应header状态码

res.sendStatus():同样是设置响应header状态码,它等同于send + status两个方法的链式操作

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值