- 框架特性
- 开始使用
- 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、客户端要向服务器端发送请求,作为服务器端来讲,它还要去创建路由来响应客户端的请求
- 11、启动服务器。在当前js文件下,运行
node 文件名.js
来执行js文件,然后网站服务器就启动成功了 - 12、访问服务器。
- 13、继续再写一个路由。
- 14、再去浏览器中访问服务器
- 引入mysql
- 中间件
- 中间件的app.use方法
- 中间件应用
- 构建模块化路由
express是node.js的第三方模块。作用是专门用来创建网站应用。 通过npm install express 命令进行下载 Express获取请求参数 Get请求参数用req.query获取 Post请求参数用req.body获取
框架特性
- 提供了方便简洁的路由定义方式
- 对获取HTTP请求参数进行了简化处理(也就是说,不用再对请求参数的格式进行转换。我们拿到的直接就是对象类型的数据)
- 对模板引擎支持程度高,方便渲染动态HTML页面
- 提供了中间件机制有效控制HTTP请求
- 拥有大量第三方中间件对功能进行扩展
这就是路由
app.get('/', function (req, res) {
res.send('GET request to the homepage')
})
开始使用
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状态码
//req是请求对象,res是响应对象
app.get('/',(req,res)=>{ //如果url里边什么都不写的话,默认是‘/’,
res.send('111'); //send方法可以直接传递json对象
})
11、启动服务器。在当前js文件下,运行 node 文件名.js
来执行js文件,然后网站服务器就启动成功了
12、访问服务器。
切换到浏览器中去访问服务器,输 http://localhost:3000 ,端口后边不输地址的话,默认访问的地址是’/‘。在这个页面中就可以看到我们send出来的内容了 在打开的页面中的在network中可以看到如下图,这就是框架内部自动给我们设置的Content-Type属性
13、继续再写一个路由。
这个路由里边写访问地址了。 而且send方法不仅可以传字符串,可以直接传递json对象,如下:
app.get('/list',(req,res)=>{
res.send({'name':'zhangsan','age':'13'})
})
14、再去浏览器中访问服务器
引入mysql
1、安装mysql npm i mysql
2、引入mysql并初始化数据库信息
const mysql = require('mysql') //引入mysql
const connection = mysql.createConnection({ //创建链接
host: 'localhost',
user: 'root',
password: '123456',
database: 'yuedu' //自己本地的数据库名字
})
connection.connect() //连接
3、mysql结合路由发起请求
app.get('/data', (req, res) => {
connection.query(`select * from t_article`, function (err, result) {
const obj = {
status: 200,
data: result
}
res.json(obj)
})
})
中间件
中间件就是express提供的一堆方法,这些方法可以接收客户端发来的请求,也可以对这些请求做出响应。
它的作用就是接收请求,处理请求
对于同一个请求,我们可以设置多个中间件,这些中间件会按照定义的顺序,依次对请求进行处理。
我们可以把一个复杂的请求处理逻辑,进行分开处理。也可以在请求到达指定路由 前,先进行一些验证
中间件是由两部分组成的,中间件方法以及请求处理函数。
中间件方法是由express提供的,负责拦截请求,请求处理函数时由开发人员提供的,负责处理请求。
例如:
app.get(‘请求路径’,’处理函数’); //get方法就是由框架提供的,用来接收请求,处理函数就是由开发人员提供的。
对于同一个请求,可以设置多个中间件,对同一个请求进行多次处理
默认情况下,请求 从上到下依次匹配中间件,一旦匹配成功,就终止匹配
请求处理函数除了有请求对象,响应对象这两个参数外,还有第三个参数next。next实际上是一个方法(权限控制方法),作用是 是否允许请求走到下一个中间件,调用这个方法 就可以将请求再交给下一个中间件继续处理。
app.get('/request',(req,res,next)=>{ //默认情况下,请求匹配到一个中间件的时候,就终止匹配了,但我们想
//让它继续向下匹配,所以加上第三个参数next
req.name = "张三"; //当用户访问request的时候,在req对象下边添加一个name属性
});
app.get('/request',(req,res){
res.send(req.name);
})
中间件的app.use方法
app.use匹配所有的请求方式(不区分请求方式),可以直接传入请求处理函数,代表接收所有的请求。
注意: 因为中间件是有顺序的,所以这个中间件必须定义在其他中间件的前边 。不然如果其他中间件匹配到了这个请求,又没有将这个请求交给下一个中间件,那么也是无法匹配到这个请求的。
app.use((req,res,next)=>{ //这个没有写地址,那么就是不管是什么地址,什么请求方式,都要从这里过
console.log(req.url); //console.log的东西,在命令窗口查看
next(); //这里要调用next方法。如果不调用,并且这里也没有给客户端响应内容,那么请求就卡在了这
})
app.use第一个参数也可以传入请求地址,代表不论什么请求方式,只要是这个请求地址就接收这个请求。
app.use('/admin',(req,res,next)=>{//这里加了地址,代表只要是这个地址发来的请求,不管请求方式如何,都接收
console.log(req.url);
next();
})
中间件应用
1、路由保护。客户端在访问需要登陆的页面时,可以先使用中间件判断用户登录状态,用户如果未登录,则拦截请求,直接响应,禁止用户进入需要登录的页面。
2、网站维护公告。在所有路由的最上边定义接受所有请求的中间件,直接为客户端做出响应,网站正在维护中。
3、自定义404页面
构建模块化路由
在一个真实的项目中,路由的数量是比较多的,如果将所有的路由都罗列在同一个文件中,是一件很可怕的事情。 所以express框架就提供了模块化构建路由的方法。我们可以根据某种条件,把路由进行分类,不同类别的路由放置在不同的模块当中,方便管理。
创建模块化路由的基础代码
const express = require('express'); //引入express框架,返回值是一个方法,这个方法下边还有很多其他的方法
//创建路由对象
const home = express.Router(); //调用express方法下边的router方法。作用是创建路由,返回值是一个路由对象
//将路由和请求路径进行匹配
app.use('/home',home)