express 框架

目录

一、express 介绍

二、express 使用

三、express路由

3.1 什么是路由

3.2 路由的使用

3.3 获取请求参数

3.4 获取路由参数

四、express 响应设置

五、快递中间件

5.1 什么是中间件

5.2 中间件的作用

5.3 中间件的类型

5.3.1 定义全局中间件

5.4 获取请求数据

六、 防盗链


一、express 介绍

express 是一个基于 Nodejs 平台的极简、灵活的 WEB 应用开发框架,官方网址:https://www.expressjs.com.cn/简单来说,express 是一个封装好的工具包,封装了很多功能,便于我们开发WEB 应用(HTTP 服务)


二、express 使用

大家可以按照这个步骤进行操作:

// 1.导入express
const express = require('express');
// 2.创建express实例
const app = express();
// 3.配置路由
app.get('/home', (req, res) => {
    res.send('这是首页');
})
// 4.监听端口
app.listen(3000, () => {
    console.log('服务器启动成功');
})

三、express路由

3.1 什么是路由

官户定义:路由确定了应用程序如何响应客户端对特定端点的请求

3.2 路由的使用

一个路由的组成有 请求方法, 路径 和 回调函数 组成

express 中提供了一系列方法,可以很方便的使用路由,使用格式如下:

app.<method>(path,callback)

代码示例:

// 1.导入express
const express = require('express');
// 2.创建express实例
const app = express();
// 3.配置路由
app.get('/home', (req, res) => {
    res.send('这是首页');
})

app.get('/', (req, res) => {
    res.send('这是真正的首页');
})

app.post('/login', (req, res) => {
    res.end('login');
})
//匹配所有请求方法
app.all('/test', (req, res) => {
    res.end('test');
})
//404
app.all('/*', (req, res) => {
    res.end('404');
})
// 4.监听端口
app.listen(3000, () => {
    console.log('服务器启动成功');
})

3.3 获取请求参数

express 框架封装了一些 API 来方便获取请求报文中的数据,并且兼容原生 HTTP 模块的获取方式

// 导入express
const express = require('express');

// 创建express实例
const app = express();

// 配置路由
app.get('/request', (req, res) => {
    //原生操作
    // console.log(req.method);
    // console.log(req.url);
    // console.log(req.httpVersion);
    // console.log(req.header);

    // //express 操作
    // console.log(req.path);
    // console.log(req.query);
    // //获取ip
    // console.log(req.ip);
    //获取请求头
    console.log(req.get('host'));

    res.send('这是首页');
})

// 监听端口
app.listen(3000, () => {
    console.log('服务器启动成功');
})

3.4 获取路由参数

路由参数指的是 URL 路径中的参数(数据)

app.get('/:id.html',(req,res)=> {
        res.send('商品详情,商品 id 为' + req.params.id);

});

// 导入express
const express = require('express');

// 创建express实例
const app = express();

// 配置路由
app.get('/:id.html', (req, res) => {
    //获取路由参数
    const id = req.params.id;
    console.log(id);

    // 设置响应头
    res.setHeader('Content-Type', 'text/html;charset=utf8');
    res.send('商品详情');
})

// 监听端口
app.listen(3000, () => {
    console.log('服务器启动成功');
})

四、express 响应设置

express 框架封装了一些 API 来方便给客户端响应数据,并且兼容原生 HTTP 模块的获取方式

//导入 express
const express = require('express');

//创建应用对象
const app = express();

//创建路由
app.get('/response', (req, res) => {
  //原生响应
  // res.statusCode = 404;
  // res.statusMessage = 'love';
  // res.setHeader('xxx', 'yyy');
  // res.write('hello express ')
  // res.end('response');

  //express 响应
  // res.status(500);
  // res.set('aaa','bbb');
  // res.send('你好 Express');
  res.status(500).set('abc','def').send('这都是 OK 的');
  
});

//监听端口, 启动服务
app.listen(3000, () => {
  console.log('服务已经启动, 端口 3000 正在监听中....')
})

其他响应

//导入 express
const express = require('express');

//创建应用对象
const app = express();

//创建路由
app.get('/other', (req, res) => {
  //跳转响应
  // res.redirect('http://atguigu.com');
  //下载响应
  // res.download(__dirname + '/package.json');
  // JSON 响应
  // res.json({
  //   name: '尚硅谷',
  //   slogon: '让天下没有难学的技术'
  // })
  //响应文件内容
  res.sendFile(__dirname + '/test.html');// path.resolve()
});

//监听端口, 启动服务
app.listen(3000, () => {
  console.log('服务已经启动, 端口 3000 正在监听中....')
})

五、快递中间件

5.1 什么是中间件

中间件(Middleware)本质是一个回调函数
中间件函数可以像路由回调一样访问请求对象(request)响应对象(response)

5.2 中间件的作用

中间件的作用就是使用函数封装公共操作,简化代码

5.3 中间件的类型

  • 全局中间件
  • 路由中间件

5.3.1 定义全局中间件

每一个请求到达服务端之后都会执行全局中间件函数

  • 全局中间件
/**
 * 记录每个请求的 url 与 IP 地址
 */
//导入 express
const express = require('express');
const fs = require('fs');
const path = require('path');

//创建应用对象
const app = express();

//声明中间件函数
function recordMiddleware(req, res, next){
  //获取 url 和 ip
  let {url, ip} = req;
  //将信息保存在文件中 access.log
  fs.appendFileSync(path.resolve(__dirname, './access.log'), `${url}  ${ip}\r\n`);
  //调用 next
  next();
}

//使用中间件函数
app.use(recordMiddleware);

//创建路由
app.get('/home', (req, res) => {
  res.send('前台首页');
});

app.get('/admin', (req, res) => {
  res.send('后台首页');
});

app.all('*',(req, res) => {
  res.send('<h1>404 Not Found</h1>')
})

//监听端口, 启动服务
app.listen(3000, () => {
  console.log('服务已经启动, 端口 3000 正在监听中....')
})
  • 路由中间件
/**
 * 针对 /admin  /setting 的请求, 要求 URL 携带 code=521 参数, 如未携带提示『暗号错误』  
 */

//导入 express
const express = require('express');

//创建应用对象
const app = express();

//创建路由
app.get('/home', (req, res) => {
  res.send('前台首页');
});

//声明中间件
let checkCodeMiddleware = (req, res, next) => {
  //判断 URL 中是否 code 参数等于 521
  if(req.query.code === '521'){
    next();
  }else{
    res.send('暗号错误');
  }
}

//后台
app.get('/admin', checkCodeMiddleware, (req, res) => {
  res.send('后台首页');
});

//后台设置
app.get('/setting', checkCodeMiddleware, (req, res) => {
  res.send('设置页面');
});

app.all('*',(req, res) => {
  res.send('<h1>404 Not Found</h1>')
})

//监听端口, 启动服务
app.listen(3000, () => {
  console.log('服务已经启动, 端口 3000 正在监听中....')
})
  • 静态资源中间件
//导入 express
const express = require('express');

//创建应用对象
const app = express();

//创建路由
app.get('/', (req, res) => {
  res.send('我才是首页~~~');
});

//静态资源中间件设置
app.use(express.static(__dirname + '/public'));


//监听端口, 启动服务
app.listen(3000, () => {
  console.log('服务已经启动, 端口 3000 正在监听中....')
})

5.4 获取请求数据

 express 可以使用 body-parser包处理请求体

第一步:安装

npm i body-parser

 第二步:导入body-parser包

const bodyParser =require('body-parser');

第三步:获取中间件函数

第四步:设置路由中间件,然后使用 request.body 来获取请求体数据

/**
 * 按照要求搭建 HTTP 服务
 * 
 * GET   /login  显示表单网页
 * POST  /login  获取表单中的『用户名』和『密码』
 */
//导入 express
const express = require('express');
const bodyParser = require('body-parser')

//创建应用对象
const app = express();

//解析 JSON 格式的请求体的中间件
// const jsonParser = bodyParser.json()

//解析 querystring 格式请求体的中间件
const urlencodedParser = bodyParser.urlencoded({ extended: false })

//创建路由规则
app.get('/login', (req, res) => {
  // res.send('表单页面')
  //响应 HTML 文件内容
  res.sendFile(__dirname + '/11_form.html');
});

//post 规则
app.post('/login', urlencodedParser, (req, res) => {
  //获取 用户名 和 密码
  console.log(req.body);
  res.send('获取用户的数据')
});

//启动服务
app.listen(3000, () => {
  console.log('server is running...');
})

六、 防盗链

//导入 express
const express = require('express');

//创建应用对象
const app = 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 Not Found</h1>');
      return;
    }
  }
  next();
});

//静态资源中间件设置
app.use(express.static(__dirname + '/public'));

//监听端口, 启动服务
app.listen(3000, () => {
  console.log('服务已经启动, 端口 3000 正在监听中....')
})

  • 26
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值