express静态资源托管
1.导入express模块
const express = require("express");
2.创建服务器
const app = express();
3.静态资源托管
app.use(express.static('public'));
app.use(express.static('static'));
4.开启监听
app.listen(4399);
5 路由的使用
// 导入express模块
const express = require("express");
const querystring = require("querystring");
// 创建服务器
const app = express();
// get请求数据 express已经封装好了解析的方法 点query出来的就已经是对象
app.get("/search", (req,res) => {
console.log(req);
console.log(req.query);
res.send("/search");
})
app.post("/add", (req, res) => {
// 使用get的方式获取参数 获取不到 因为他不是在url传数据
// console.log(req);
// console.log(req.query);
var str = "";
req.on("data", data => {
str += data;
})
req.on("end", () => {
console.log(str);
var data = querystring.parse(str);
console.log(data);
})
res.send("/add");
})
// 开启监听
app.listen(8848);
1
Express中间件
Express 是一个自身功能极简,完全是由路由和中间件构成一个的 web 开发框架,从本质上来说,一个 Express 应用就是在调用各种中间件。
中间件(Middleware) 是一个函数,它可以访问请求对象(request object (req)), 响应对象(response object (res)), 和 web 应用中处于请求-响应循环流程中的中间件,一般被命名为 next 的变量。
中间件的功能包括:
(1). 执行任何代码。
(2). 修改请求和响应对象。
(3). 终结请求-响应循环。
(4). 调用堆栈中的下一个中间件。
如果当前中间件没有终结请求-响应循环,则必须调用 next() 方法将控制权交给下一个中间件,否则请求就会挂起。
Express 应用可使用如下几种中间件:
(1). 应用级中间件
(2). 路由级中间件
(3). 错误处理中间件
(4). 内置中间件
(5). 第三方中间件
使用可选则挂载路径,可在应用级别或路由级别装载中间件,另外,你还可以同时装在一系列中间件函数,从而在一个挂载点上创建一个子中间件栈。
app.use(url, (req, res, next)=>{
//中间件要执行的代码
//调用下一个中间件或路由
next( );
})
const express = require("express");
const app = express();
app.use("/",(req,res,next)=>{
console.log("中间件")
let {token} = req.query;
if(token){
next() // 是否继续往下执行
}else{
res.send("缺少token")
}
})
// test1接口
app.get("/test1",(req,res) => {
console.log('test1');
res.send(`test1 token为${req.query.token}`)
})
// test2接口
app.get("/test2",(req,res) => {
console.log('test2');
res.send(`test2 token为${req.query.token}`)
})
// 开启服务器
app.listen(2000,() => {
console.log('开启在2000端口');
})
浏览器中访问/test1 不带token字段
现在带上token字段访问/test2
这就实现了通过中间件做全局拦截,这种中间件属于自定义拦截器.如果app.use()的第一个参数是 / 表示路径,则第一个参数可以不写,如下
app.use("/",(req,res,next)=>{
next() // 是否继续往下执行
})
等同于
app.use((req,res,next)=>{
next() // 是否继续往下执行
})
为什么说这一种是全局的 ,因为所有的接口都走这里 接下来看局部中间件
局部中间件
第一个参数还是路径 第二个参数是一个function 第三个参数还是function
const express = require("express");
const app = express();
app.get("/demo",(req,res,next) => {
console.log('fun1');
},(req,res) => {
console.log('fun2');
})
// 开启服务器
app.listen(2000,() => {
console.log('开启在2000端口');
})
现在请求/demo接口 浏览器中没有响应 因为第一个回调函数里没有next() 不会走到第二个回调函数里
终端打印
const express = require("express");
const app = express();
app.get("/demo",(req,res,next) => {
console.log('fun1');
next()
},(req,res) => {
res.send("fun2")
console.log('fun2');
})
// 开启服务器
app.listen(2000,() => {
console.log('开启在2000端口');
})
浏览器中访问/demo
终端打印
这种叫局部中间件,局部中间件是 在哪个接口里写就只对哪个接口有用,局部中间件可以写无数个 只要在合适的地方使用next()就可以一个接一个的往下执行,一般情况下使用局部中间件最多使用一两个就够了 使用多个局部中间件 代码结构如下