Express 框架
1.Express框架简介
Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。使用 Express 可以快速地搭建一个完整功能的网站。
Express 框架核心特性:
- 可以设置中间件来响应 HTTP 请求。
- 定义了路由表用于执行不同的 HTTP 请求动作。
- 可以通过向模板传递参数来动态渲染 HTML 页面。
EXpress的使用:
- 安装cnpm install express --save-dev
- 连接服务器
const express=require(“express”);
let app=new express();
在express里面配置静态资源文件托管
Express 提供了内置的中间件 express.static 来设置静态文件如:图片, CSS, JavaScript 等。
目录结构:
app.js
//1.安装cnpm install express --save-dev
//2.连接服务器
const express=require("express");
let app=new express();
//在express里面配置静态资源文件托管
//静态资源目录 目的是放置 图片 css js等静态文件
app.use(express.static("public"));
//虚拟静态目录
//app.use("/static",express.static("public"));
app.use("/public",express.static(path.join(__dirname,"/static")));
app.listen("8150",(req,res)=>{
console.log("127.168.90.1:8150");
})
使用中间件:
表达是路由和中间件的web框架,它有自己的最小功能:表达应用程序本质上是一系列的中间件函数调用。
中间件函数是函数访问请求对象(req),响应对象(res),下一个中间件功能在应用程序的请求-响应周期。 下一个中间件功能通常是用一个变量命名next。
中间件功能可以执行以下任务:
- 执行任何代码。
- 更改请求和响应对象。
- 请求-响应周期结束。
- 叫下一个中间件函数的堆栈。
如果目前的中间件功能不请求-响应周期结束时,必须调用next()将控制传递给下一个中间件的功能。 否则,请求将被搁置下来。
一个表达应用程序可以使用以下类型的中间件:
- 应用程序中间件
- 路由器级别中间件
- 错误处理中间件
- 内置的中间件
- 第三方中间件
Express的中间件
const express=require("express");
let app=new express();
app.use((req,res,next)=>{
console.log("在执行路由之前执行拦截操作")
next();
})
app.listen("8150",(req,res)=>{
console.log("127.168.90.1:8150");
})
1. 应用层中间件
绑定应用程序中间件的一个实例应用程序对象通过使用app.use()和app.METHOD()功能,METHOD请求的HTTP方法,中间件功能处理(如GET、PUT、POST)小写。
const express=require("express");
let app=new express();
//应用层中间件 --项目运行都会执行的中间件
app.use((req,res,next)=>{
next();
})
app.listen("8150",(req,res)=>{
console.log("127.168.90.1:8150");
})
2. 路由中间件+路由
路由是指一个应用程序的端点(uri)如何应对客户端请求。
express 里面的路由 get post insert put delete
app是的实例express
METHOD是小写的http请求方法
PATH 是服务器上的路径
HANDLER是匹配路线是执行的功能
路由器级别中间件和应用程序级中间件,以同样的方式工作,除了它是必然的一个实例express.Router()。
const express=require("express");
let app=new express();
//express中的路由
let router=express.Router();
app.use("/",(req,res,next)=>{
console.log("首页加载")
next();
});
app.use("",(req,res)=>{
console.log("1");
res.send("express");
});
app.use("/login",(req,res,next)=>{
console.log("login加载");
next();
})
app.use("/login",(req,res)=>{
console.log("2");
res.send("login");
});
app.use("/regist",(req,res)=>{
res.send("注册");
})
app.listen("8150",(req,res)=>{
console.log("127.168.90.1:8150");
})
//路由中间件 第二种写法
router.use("/",(req,res,next)=>{
console.log("1");
next();
})
router.use("/",(req,res,next)=>{
res.send("首页")
});
//使用express router 配置路由
//路由中间件
router.get("/",(req,res,next)=>{
console.log("1");
next();
})
router.get("/",(req,res,next)=>{
res.send("首页")
});
动态路由传值和get传值
//动态路由传值 类似vue里面的动态路由传值 /:id
router.get("/regest/:id/:name",(req,res,next)=>{
//获取动态路由传递的参数
console.log(req.params);
let id=req.params.id;
let name=req.params.name;
res.send("注册成功!"+id+"/"+name);
})
//路由上的get传值
router.get("/user",(req,res,next)=>{
let params=url.parse(req.url,true).query;
let id=params.id;
let name=params.name;
res.send("get传值:"+id+"/"+name);
})
3. 第三方中间件
使用第三方中间件来表达应用程序添加功能。
安装节点。 js为所需的功能模块,然后加载在你的应用程序在应用程序级别或在路由器上。
body-parse:
- 使用第三方中间件 安装 cnpm install body-parser --save-dev
- 引入body-parser
- bodyparser在express中进行配置
- pist提交取值在req.body
cookie-parser 第三方中间件 - 安装 cnpm install cookie-parser --save-dev
- 引入 const cookie=require(“cookie-parser”);
- 进行关联 app.use(cookie);
const path=require("path");
const bodyparser=require("body-parser");
const ejs=require("ejs");
const cookie=require("cookie-parser");
const fs=require("fs");
//使用express
const express=require("express");
let app=new express();
//设置ejs模板
app.set("view engine","ejs");
//修改ejs后缀名为html
app.engine('html',require('ejs').readerFile);
//关联cookie-parser
app.use(cookie());
//配置bodyparser
app.use(bodyparser.urlencoded({extended:false}));
//parser application/json 配置返回的数据格式
app.use(bodyparser.json());
//express中的路由
let router=express.Router();
router.get("/",(req,res,next)=>{
//在首页加载之前缓存cookie
res.cookie("user","maodou",{
maxAge:1000*60,
signed:false
})
console.log("1");
next();
},(req,res,next)=>{
//express 框架缓存值
app.set("user","张三");
app.locals["age"]=20;
ejs.readerFile("./views/index.html",(err,str)=>{
if(err){
next(err);
}
res.send(str);
})
ejs.readerFile("./views/index.ejs",(err,str)=>{
if(err){
next(err);
}
res.send(str);
})
});
//cookie 设置签名的时候在上面引入里面签名的符号 app.use(cookie("adsdas"));
router.get("/login",(req,res,next)=>{
//获取cookie的缓存值
//未签名 signed:false req.cookies获取
//签名 req.signedCookies获取
console.log(req.cookies);
next();
})
router.get("/login",(req,res,next)=>{
//取值
console.log(app.get("user"))
console.log(app.locals["age"]);
fs.readFile("static/stu.txt",(err,data)=>{
if(err){
next(err);
}
else{
res.send("登录"+data.toString())
}
});
});
//关联
app.use(router);
app.listen("8150",(req,res)=>{
console.log("127.168.90.1:8150");
})
//koa 框架 和express类似 是个异步框架
4. 错误中间件
错误处理中间件总是四个参数。 你必须提供四个参数来确定它作为错误处理中间件的功能。 即使你不需要使用next对象,您必须指定它保持签名。 否则,next对象将被视为普通中间件和将无法处理错误。(err, req, res, next)
const fs=require("fs");
const express=require("express");
let app=new express();
//错误中间件
app.use((err,req,res,next)=>{
fs.appendFile("static/err.txt",err.stack+"\n",(err)=>{
console.log("错误写入成功!");
res.status(400).send("文件丢失");
});
})
app.listen("8150",(req,res)=>{
console.log("127.168.90.1:8150");
})
5. 内置中间件
首先是版本4。 x,表达不再依赖连接。 中间件 附带的功能表达现在在单独的模块; 看到中间件功能的列表。
表达有以下内置的中间件功能:
- express.static是静态的资产,比如HTML文件,图片,等等.
- express.json与JSON解析传入的请求负载。注意:使用表达4.16.0 +
- express.urlencoded解析传入的请求url编码的有效载荷。注意:使用表达4.16.0 +