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
- 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>