Node.js路由器、中间件、myaql模块

1.路由器

用来管理路由,将同一个功能模块下的所有的路由统一管理,最终路由器被WEB服务器使用

路由器创建并导出

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

const r=express.Router();//创建路由器对象.

//添加路由.

module.exports=r;//导出路由器对象

WEB服务器引入并使用路由器

const userRouter=require('./user.js');

app.use('/user',userRouter);

练习:完成用户路由器user.js,添加用户列表路由(get/list),导出路由器,最后在app.js下引入路由器并使用,添加前缀/user.

app.js代码:

const express=require('express');
const userRouter=require('./routes/user.js');
//console.log(userRouter);
const app=express();
app.listen(8080);
app.use(express.urlencoded({
	extended:false
}));
app.use('/v1/users',userRouter);//使用路由器添加前缀/v1/users

app.use((err,req,res,next)=>{//使用错误处理中间件,拦截所有路由中抛出的错误
	console.log(err);//err 得到的中间件传递过来的错误
	res.status(500).send({code:500,msg:'服务器端错误'});
});

user.js:代码:

//引入express第三方模块
const express=require('express');
//创建路由器对象
const r=express.Router();
//往路由器下添加路由
//用户列表(get/list)
r.get('/list',(rsq,res)=>{
	res.send('这是用户列表');
});
//导出路由器对象
module.exports=r;

2.中间件

用于拦截对服务器的请求

分为应用级中间件、路由级中间件、内置中间件、第三方中间件、错误处理中间件.

(1)应用级中间件

就是一个函数,一旦拦截到以后会自动调用这个函数

app.use(要拦截的URL,函数)

练习:添加到购物车的路由(get /shopping),传递商品的价格 price,添加中间件,实现对商品价格打九折,最后响应‘商品的价格: xxxx’.

const express=require('express');
//创建WEB服务器
const app=express();
//设置端口
app.listen(8080);
function fn2(req,res,next){
	//获取get传递的数据
	console.log(req.query);
	//打折
	req.query.price*=0.9;
	//往后继续执行
	next();
};
//添加中间件,拦截对/shopping的请求
app.use('/shopping',fn2);
//路由(get /shopping)
app.get('/shopping',(req,res)=>{
	//获取get传递的数据
	console.log(req.query);
	res.send('商品的价格:'+req.query.price);
});

http://127.0.0.1:8080/shopping?price=1000. 

(2)路由级中间件

路由器的使用

(3)内置中间件

托管静态资源中间件.

如果浏览器端请求静态资源(html, css, js,图像...),不需要通过路由去响应,而是自动的到某个目录下寻找。

app.use(express.static(要托管的目录))

练习:编写04_three.js 文件,创建WEB服务器,托管静态资源到 public目录,包含文件login.html,点击提交向服务器请求(post/mylogin),获取传递的数据,响应‘登录成功’

js文件代码:

const express=require('express');
//1.引入body-parser中间件模块
const bodyParser=require('body-parser');
//创建WEB服务器
//const querystring=require('querystring');
const app=express();
//设置端口
app.listen(8080);
//托管静态资源到public目录
app.use(express.static('./public'));
//2.使用body-parser中间件,将所有post请求的数据解析为对象
//body-parser中间件也是内置的中间件,也可以使用extended
app.use(express.urlencoded({
	bodyParser:false  //是否使用第三方的qs模块解析为对象
}));
//3.获取post传递的数据
app.post('/mylogin',(req,res)=>{
	console.log(req.body);
	res.send('登录成功');
});

 js文件同目录public目录里的html文件代码:

<h2>用户登录</h2>
<form method="post" action="/mylogin">
	用户:<input type="text" name='user'/><br>
	密码:<input type="text" name="password"/><br>
	<input type="submit"><br>
</form>

(4)第三方中间件

都是以第三方模块的形式存在,需要先下载安装

body-parser中间件

下载安装  npm install body-parser

1.引入body-parser.

2.使用body-parser将所有post请求的数据解析为对象

app.use( express.urlencoded({

extended:false//是否使用第三方的qs模块解析为对象

}) );

3.在路由中获取post请求的数据

req.body.

其它第三方中间件: https://www.expressjs.com.cn/resources/middleware.html.

文件上传中间件: http://www.codece.com/archives/173

  1. mysql模块

是Node.js下专门用于操作mysql数据库的模块

下载安装

npm install mysql

连接数据库

 myaql.exe -h127.0.0.1 -P3306 -uroot -p

简写:mysql -uroot

mysql -uroot<拖拽脚本文件

练习创建WEB服务器,托管静态资源到public目录,包含文件add.html,点击提交向服务器发请求(post  /add),获取传递的数据,响应“员工添加成功”

js文件代码:

/*
引入express第三方模块
1.引入body-parser中间件模块
创建WEB服务器
设置端口
托管静态资源到public目录
2.使用body-parser中间件,将所有post请求的数据解析为对象
3.获取post传递的数据
*/
const express=require('express');
const bodyParser=require('body-parser');
const app=express();
app.listen(8080);
app.use(express.static('./public'));
app.use(express.urlencoded({
	bodyParser:false
}));
app.post('/add',(req,res)=>{
	console.log(req.body);
	res.send('注册成功');
});

js文件同目录public目录里的html文件代码:

<form method="post" action="/add">
	姓名<input type="text" name="user"/><br>
	姓别<input type="text" name="user"/><br>
	生日<input type="text" name="user"/><br>
	工资<input type="text" name="user"/><br>
	部门<input type="text" name="user"/><br>
	<input type="submit"/><br>
</form>

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

D_evin_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值