文章目录
前言
express是一个基于Node.js平台的极简、灵活的WEB应用开发框架。它是一个封装好的工具包,封装了很多功能,便于我们开发WEB应用(HTTP服务)。
express 的作用和 Node.js 内置的 http 模块类似,是专门用来创建Web 服务器的。
express 的本质:就是一个npm 上的第三方包,提供了快速创建Web 服务器的便捷方法。
一、express 路由简介
1、定义
路由确定了应用程序如何响应客户端对特定端点的请求
2、基础使用
一个路由的组成有请求方法
、路径
、回调函数
组成
// 导入express
const express=require('express');
// 创建应用对象
const app=express();
// 创建路由
app.get('/home',(req,res)=>{
res.end('hello express');
});
app.post('/login',(req,res)=>{
res.end('login login')
})
// 404响应
app.all('*',(req,res)=>{
res.end('404 not Found')
})
// 监听端口,启动服务
app.listen(3000,()=>{
console.log('服务已经启动,端口3000正在监听中....')
})
二、express 获取参数
1、获取请求报文参数
代码如下:
// 创建路由
app.get('/home',(req,res)=>{
// 原生操作
console.log(req.method);
console.log(req.url);
console.log(req.httpVersion);
console.log(req.headers);
// express 操作
console.log(req.path);
console.log(req.query);
console.log(req.ip);
// 获取请求头
console.log(req.get('host'));
});
2、获取路由参数
代码如下:
// 创建路由
app.get('/:id.html',(req,res)=>{
// 获取url路由参数
console.log(req.params.id);
res.setHeader('content-type','text/html;charset=utf-8');
res.end('商品详情')
});
三、express 响应设置
1、一般响应设置
代码如下:
// 创建路由
app.get('/:id.html',(req,res)=>{
// 原生响应
res.statusCode=404;
res.statusMessage='Error';
res.setHeader('xxx','yyy');
res.write('hello express');
res.end('response');
// express响应
res.status(500);
res.set('aaa','bbb');
res.send('你好');
// 连贯操作
res.status(404).set('xxx','yyy').send('你好朋友')
});
2、其他响应设置
app.get('/:id.html',(req,res)=>{
// 跳转响应
res.redirect('www.baidu.com');
// 下载响应
res.download(__dirname+'/package.json');
// JSON响应
res.json({
name:'网页',
slogon:'你好'
})
// 响应文件内容
res.sendFile(__dirname+'/test.html');
});
四、express 防盗链
代码如下:
app.use((req,res,next)=>{
//检测请求头中referer是否为127.0.0.1
//获取referer
let referer=req.get('referer');
if(referer){
// 实例化
let url=new URL(referer);
// 获取hostname
let hostname=url.hostname;
// 判断
if(hostname!=='127.0.0.1'){
// 响应404
res.status(404).send('<h1>404</h1>')
return;
}
}
next();
})
五、express 路由模块化
1、模块中代码如下:
const express =require('express');
// 创建路由对象
const router=express.Router();
router.get('/admin',(req,res)=>{
res.send('....')
});
// 向外暴露模块
module.exports=router;
2、主文件中代码如下:
const 模块名=require('./...')
app.use('模块名')