express是node.js的第三方模块。作用是专门用来创建网站应用。 通过npm install express 命令进行下载 Express获取请求参数 Get请求参数用req.query获取 Post请求参数用req.body获取

框架特性

  • 提供了方便简洁的路由定义方式
  • 对获取HTTP请求参数进行了简化处理(也就是说,不用再对请求参数的格式进行转换。我们拿到的直接就是对象类型的数据)
  • 对模板引擎支持程度高,方便渲染动态HTML页面
  • 提供了中间件机制有效控制HTTP请求
  • 拥有大量第三方中间件对功能进行扩展

这就是路由

  1. app.get('/', function (req, res) {
  2. res.send('GET request to the homepage')
  3. })

开始使用

首先确保安装过npm和node了

1、新建一个文件夹作为工作目录

2、在该文件夹的命令窗口中,先npm init , 初始化npm,生成一个package.json文件

3、安装 npm install express —save

4、新建一个js文件,并对它开始进行编辑

5、首先,要在js文件中引入js框架。require('express')

6、引入js框架后,框架会有一个返回值,我们要定义一个变量去接收它 const express = require('express')

这个返回值实际上是一个方法,并且这个方法的下边还有很多子方法

7、创建网站服务器。express() 通过调用这个方法,我们就可以创建网站服务器了

8、const app = express() 将变量调用的结果赋给一个变量。现在app代表的就是网站服务器

9、有网站服务器还不行,还得让网站服务器去监听端口,它才能够向外提供服务。所以,这一步就是要通过调用网站服务器对象 下边的listen方法去 监听端口 app.listen(3000)

10、客户端要向服务器端发送请求,作为服务器端来讲,它还要去创建路由来响应客户端的请求

在网站服务器app下边有一个get方法和一个post方法,用来接收get请求和post请求。 res下边有一个send() 方法对客户端进行响应。send方法的作用如下: 1、send方法内部 会帮我们自动检测响应内容的类型,帮我们把这个类型自动设置到响应头当中; 2、同时还可以帮我们设置响应的内容类型及编码,以防止出现乱码的情况; 3、会自动设置http状态码

  1. //req是请求对象,res是响应对象
  2. app.get('/',(req,res)=>{ //如果url里边什么都不写的话,默认是‘/’,
  3. res.send('111'); //send方法可以直接传递json对象
  4. })

11、启动服务器。在当前js文件下,运行 node 文件名.js来执行js文件,然后网站服务器就启动成功了

12、访问服务器。

切换到浏览器中去访问服务器,输 http://localhost:3000 ,端口后边不输地址的话,默认访问的地址是’/‘。在这个页面中就可以看到我们send出来的内容了 在打开的页面中的在network中可以看到如下图,这就是框架内部自动给我们设置的Content-Type属性

image.png

13、继续再写一个路由。

这个路由里边写访问地址了。 而且send方法不仅可以传字符串,可以直接传递json对象,如下:

  1. app.get('/list',(req,res)=>{
  2. res.send({'name':'zhangsan','age':'13'})
  3. })

14、再去浏览器中访问服务器

image.png

引入mysql

1、安装mysql npm i mysql
2、引入mysql并初始化数据库信息

  1. const mysql = require('mysql') //引入mysql
  2. const connection = mysql.createConnection({ //创建链接
  3. host: 'localhost',
  4. user: 'root',
  5. password: '123456',
  6. database: 'yuedu' //自己本地的数据库名字
  7. })
  8. connection.connect() //连接

3、mysql结合路由发起请求

  1. app.get('/data', (req, res) => {
  2. connection.query(`select * from t_article`, function (err, result) {
  3. const obj = {
  4. status: 200,
  5. data: result
  6. }
  7. res.json(obj)
  8. })
  9. })

中间件

中间件就是express提供的一堆方法,这些方法可以接收客户端发来的请求,也可以对这些请求做出响应。
它的作用就是接收请求,处理请求

对于同一个请求,我们可以设置多个中间件,这些中间件会按照定义的顺序,依次对请求进行处理。
图片.png

我们可以把一个复杂的请求处理逻辑,进行分开处理。也可以在请求到达指定路由 前,先进行一些验证

中间件是由两部分组成的,中间件方法以及请求处理函数。
中间件方法是由express提供的,负责拦截请求,请求处理函数时由开发人员提供的,负责处理请求。
例如:
app.get(‘请求路径’,’处理函数’); //get方法就是由框架提供的,用来接收请求,处理函数就是由开发人员提供的。

对于同一个请求,可以设置多个中间件,对同一个请求进行多次处理
默认情况下,请求 从上到下依次匹配中间件,一旦匹配成功,就终止匹配
请求处理函数除了有请求对象,响应对象这两个参数外,还有第三个参数next。next实际上是一个方法(权限控制方法),作用是 是否允许请求走到下一个中间件,调用这个方法 就可以将请求再交给下一个中间件继续处理。

  1. app.get('/request',(req,res,next)=>{ //默认情况下,请求匹配到一个中间件的时候,就终止匹配了,但我们想
  2. //让它继续向下匹配,所以加上第三个参数next
  3. req.name = "张三"; //当用户访问request的时候,在req对象下边添加一个name属性
  4. });
  5. app.get('/request',(req,res){
  6. res.send(req.name);
  7. })

中间件的app.use方法

app.use匹配所有的请求方式(不区分请求方式),可以直接传入请求处理函数,代表接收所有的请求。

注意: 因为中间件是有顺序的,所以这个中间件必须定义在其他中间件的前边 。不然如果其他中间件匹配到了这个请求,又没有将这个请求交给下一个中间件,那么也是无法匹配到这个请求的。

  1. app.use((req,res,next)=>{ //这个没有写地址,那么就是不管是什么地址,什么请求方式,都要从这里过
  2. console.log(req.url); //console.log的东西,在命令窗口查看
  3. next(); //这里要调用next方法。如果不调用,并且这里也没有给客户端响应内容,那么请求就卡在了这
  4. })

app.use第一个参数也可以传入请求地址,代表不论什么请求方式,只要是这个请求地址就接收这个请求。

  1. app.use('/admin',(req,res,next)=>{//这里加了地址,代表只要是这个地址发来的请求,不管请求方式如何,都接收
  2. console.log(req.url);
  3. next();
  4. })

中间件应用

1、路由保护。客户端在访问需要登陆的页面时,可以先使用中间件判断用户登录状态,用户如果未登录,则拦截请求,直接响应,禁止用户进入需要登录的页面。
2、网站维护公告。在所有路由的最上边定义接受所有请求的中间件,直接为客户端做出响应,网站正在维护中。
3、自定义404页面

构建模块化路由

在一个真实的项目中,路由的数量是比较多的,如果将所有的路由都罗列在同一个文件中,是一件很可怕的事情。 所以express框架就提供了模块化构建路由的方法。我们可以根据某种条件,把路由进行分类,不同类别的路由放置在不同的模块当中,方便管理。

创建模块化路由的基础代码

  1. const express = require('express'); //引入express框架,返回值是一个方法,这个方法下边还有很多其他的方法
  2. //创建路由对象
  3. const home = express.Router(); //调用express方法下边的router方法。作用是创建路由,返回值是一个路由对象
  4. //将路由和请求路径进行匹配
  5. app.use('/home',home)