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
    评论
Express是一个基于Node.js的Web应用程序框架,它提供了一组简洁而灵活的功能,用于帮助开发者构建Web应用程序和API。以下是Express框架的一些特点和功能: 1. 简洁而灵活:Express提供了一组简单而灵活的API,使得构建Web应用程序变得非常容易。它没有过多的约束,允许开发者按照自己的需求进行定制。 2. 路由功能:Express提供了路由功能,可以根据不同的URL路径和HTTP方法来定义不同的处理程序。这使得开发者可以轻松地处理不同的请求,并将它们映射到相应的处理逻辑上。 3. 中间件支持:Express支持中间件,开发者可以通过中间件来处理请求和响应。中间件可以用于执行各种任务,例如身份验证、日志记录、错误处理等。Express本身只提供了一些基本的中间件,但开发者可以自定义和使用第三方中间件来满足自己的需求。 4. 模板引擎:Express支持多种模板引擎,例如EJS、Handlebars等。这使得开发者可以方便地生成动态的HTML页面,并将数据动态地渲染到页面上。 5. 静态文件服务:Express可以用于提供静态文件服务,例如HTML、CSS、JavaScript文件等。这使得开发者可以轻松地将静态文件提供给客户端。 6. 错误处理:Express提供了一套错误处理机制,可以捕获和处理应用程序中的错误。开发者可以定义自己的错误处理中间件,以便对错误进行适当的处理和响应。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值