项目开发中,不推荐将不同功能的路由都混在一起存放在一个文件中,因为随着路由的种类越来越多,管理起来会非常麻烦。为了方便路由的管理,通过express.Router()实现模块化路由管理。
const express = require('express');
express.Router()方法用于创建路由对象route。
const router = express.Router();
然后使用route.get()和route.post()来注册当前模块路由对象下的二级路由,这就是一个简单的模块化路由。
基本语法格式:
route.get('请求路径', '请求处理函数'); // 接收并处理route 下的GET 请求
route.post('请求路径', '请求处理函数'); // 接收并处理route 下的POST 请求
router.get('/index',(req,res)=>{
res.send('欢迎来到首页');
})
router.post('/info',(req,res)=>{
res.send('欢迎来到信息页');
})
module.exports = router;
路由模块代码如下
const express = require('express');
const router = express.Router();
router.get('/index',(req,res)=>{
res.send('欢迎来到首页');
})
router.post('/info',(req,res)=>{
res.send('欢迎来到信息页');
})
module.exports = router;
route对象创建成功后,使用app.use()注册route模块化路由,示例代码如下。
基本语法格式:
app.use('请求路径', route);
服务器端代码如下
const express = require('express');
const router = require('./express路由');
const web = express();
web.use('/api',router);
web.listen(3000,()=>{
console.log('服务器运行在3000端口');
})
使用原生Node.js处理GET和POST请求参数是非常麻烦的,例如,为了获取GET请求参数,需要使用url模块对请求地址进行解析。为了降低开发的难度,Express通过req.query、req.body和第三方模块body-parser对请求参数进行了处理。下面讲解Express如何接收请求参数。
Express框架中的req.query用于获取GET请求参数,框架内部会将GET参数转换为对象并返回。
web.get('/', (req, res) => {
res.send(req.query);
});
const express = require('express');
const web = express();
web.get('/query', (req, res) => {
res.send(req.query);
});
web.listen(3000,()=>{
console.log('服务器启动成功');
});
Express中的req.body用于获取POST请求参数,需要借助第三方body-parser模块将POST参数转换为对象形式。
web.post('/body', (req, res) => {
res.send(req.body);
});
body-parser是一个解析HTTP请求体的模块,使用这个模块可以处理POST请求参数,
app.use(bodyParser.urlencoded({ extended: false }));
{ extended: false}表示在方法的内部使用querystring系统模块来处理POST请求参数;
{ extended: true}表示使用qs第三方模块进行处理。
安装body-parser模块
在处理POST请求参数之前,首先要完成body-parser模块的安装。
npm install body-parser@1.18.3 --save
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.post('/body', (req, res) => {
res.send(req.body);
});
app.listen(3000,()=>{
console.log('服务器启动成功');
});
在定义路由时,可以在请求路径中传递参数,例如请求路径“/find/:id”中的“:id”是一个参数占位符,当浏览器向“/find/:id”地址发送请求时,“:id”对应的值就是参数值。把写在路由请求路径中的参数称为路由参数。
Express路由参数的示例代码如下。
app.get('/find/:id', (req, res) => {
res.send(req.params);
});
const express = require('express');
const web = express();
web.get('/find/:id', (req, res) => {
res.send(req.params);
});
web.listen(3000);
console.log('服务器启动成功');