zoukankan      html  css  js  c++  java
  • Node: Express的Route路由的使用

    一、简介

    一个Web服务器去处理每一个URL请求时,根据监听的端口和主机域名,需要对不同的路径去处理然后给出不同的响应。也即通过制定不同的路径,调用对应处理用户的请求。这个路径的制定就是路由。路由其实是一种规则而已。开发者根据这个规则去制定请求的目标地址,服务器根据这个规则去响应请求的目标地址并给出对应的响应结果。定义路由的方式有两种,第一种就是根据请求的方法名进行区分,例如GET请求或者POST请求。另一种就是通过路由的路径uri来区分。

    二、路由的定义和区分

    1、创建和启动服务

    //导入express框架
    const express = require('express');
    
    //创建express服务实例
    const app = express();
    
    //监听
    app.listen(3000, ()=>{
        console.log('服务器启动了!');
    }); 
    //启动结果如下:
    xiayuanquan@XYQ � ~/Desktop/开发案例/NodeApp/express-route-demo � npm start
    
    > express-route-demo@1.0.0 start /Users/xiayuanquan/Desktop/开发案例/NodeApp/express-route-demo
    > nodemon src/app.js
    
    [nodemon] 2.0.2
    [nodemon] to restart at any time, enter `rs`
    [nodemon] watching dir(s): *.*
    [nodemon] watching extensions: js,mjs,json
    [nodemon] starting `node src/app.js`
    服务器启动了!

    2、定义路由

    方式一:通过GET和POST等方法名区分路由

    //导入express框架
    const express = require('express');
    
    //创建express服务实例
    const app = express();
    
    //通过请求的方法类型 get/post/put/delete... 定制路由
    app.get('/demo', (req, res) => {
        //req:请求对象
        //res:服务响应对象
        res.json({
            message:'hello express route form get method'
        })
    });
    app.post('/demo', (req, res) => {
        //req:请求对象
        //res:服务响应对象
        res.json({
            message:'hello express route form post method'
        })
    });
    
    //监听
    app.listen(3000, ()=>{
        console.log('服务器启动了!');
    });

    使用Postman,访问相同的路由,根据不同的方法名,得到的响应不同,截图如下:

     

    方式二:通过uri路径

    //导入express框架
    const express = require('express');
    
    //创建express服务实例
    const app = express();
    
    //通过 uri 定制路由, 分别通过"/user/byname"和"/user/byuserId"访问
    app.get('/user/byname', (req, res) => {
        let {name} = req.query; //将请求参数析构
        res.json({
            name
        })
    });
    app.get('/user/byuserId', (req, res) => {
        let {userid} = req.query; //将请求参数析构
        res.json({
            userid
        })
    });
    
    //监听
    app.listen(3000, ()=>{
        console.log('服务器启动了!');
    });

    使用Postman,根据不同的uri路径进行访问,得到的响应不同,截图如下:

     

    三、app.all()函数和app.use()函数

    介绍了路由的定义和区分,接下来我们来对路由的常用的两个函数all()和use()进行一些简单的使用。场景示例如下:

    1、定义一个 api/路由,满足无论使用什么请求方式(get/post/put....)都可以得到响应。

    //导入express框架
    const express = require('express');
    
    //创建express服务实例
    const app = express();
    
    //使用app.all()函数和app.use()函数都可以实现该目的
    
    //使用 app.all()函数
    app.all('/demo', (req, res) => {
        res.json({
            message: 'demo',
            method: req.method
        })
    })
    
    /*
    //使用 app.use()函数 【将路由作为中间件使用】
    app.use('/demo', (req, res) => {
        res.json({
            message: 'demo',
            method: req.method
        })
    })
    */
    
    //监听
    app.listen(3000, ()=>{
        console.log('服务器启动了!');
    }); 
    //此处不再截图展示,直接显示Postman的请求结果如下:
    
    //GET方式
    {
        "message": "demo",
        "method": "GET"
    }
    
    //POST方式
    {
        "message": "demo",
        "method": "POST"
    }
    
    //PUT方式
    {
        "message": "demo",
        "method": "PUT"
    }
    
    .....................

    2、无论客户端使用任意的uri ,服务都可以得到相应。

    //导入express框架
    const express = require('express');
    
    //创建express服务实例
    const app = express();
    
    //使用app.all() 和 app.use() 函数都可以实现该目的
    
    //使用 app.all()函数
    app.all('*', (req, res) => {
        res.json({
            message: 'demo',
            method: req.method,
            uri: req.path
        })
    })
    
    /*
    //使用app.use()函数。【将路由作为中间件使用】
    app.use((req, res)=>{
        res.json({
            message: 'demo',
            method: req.method,
            uri: req.path
        })
    })
    */
    
    //监听
    app.listen(3000, ()=>{
        console.log('服务器启动了!');
    }); 
    //此处不再截图展示,直接显示Postman的请求结果如下:
    
    //通过GET方式访问"http://127.0.0.1:3000/123",uri为"/123"
    {
        "message": "demo",
        "method": "GET",
        "uri": "/123"
    }
    
    //通过GET方式访问"http://127.0.0.1:3000/123/xiayuanquan",uri为"/123/xiayuanquan"
    {
        "message": "demo",
        "method": "GET",
        "uri": "/123/xiayuanquan"
    }
    
    //通过POST方式访问"http://127.0.0.1:3000/demo/123/xiayuanquan/xxx",uri为"/demo/123/xiayuanquan/xxx"
    {
        "message": "demo",
        "method": "POST",
        "uri": "/demo/123/xiayuanquan/xxx"
    }
    
    .................................................

     

    三、路由的拆分

    团队开发时,这么多人不希望都在一个文件做修改,此时可以对路由进行拆分。express提供了一个express.Router()函数创建路由实例。在拆分路由时,需要根据对应的需求单独建立自己的路由文件,定义好自己的路由后,只需要暴露出来,然后在同一的服务文件注册即可。例如创建了member.router.js和user.router.js文件,然后在app.js中注册路由,文件如下:

    member.router.js

    //导入express框架
    const express = require('express');
    
    //定一个member路由
    const router = express.Router();
    
    //使用get请求
    router.get('/member/list', (req, res) => {
        res.json({
            list:[
                {
                    name:"张三",
                    age:20,
                },
                {
                    name:"李四",
                    age:30,
                }
            ]
        })
    })
    
    //将路由暴露出来
    module.exports = router;

    user.router.js

    //导入express框架
    const express = require('express');
    
    //定一个user路由
    const router = express.Router();
    
    //使用get请求
    router.post('/user/list', (req, res) => {
        res.json({
            list:[
                {
                    id: 1111,
                    name:"Job"
                },
                {
                    id: 2222,
                    name:"Tom"
                }
            ]
        })
    })
    
    //将路由暴露出来
    module.exports = router;

    app.js

    //导入express框架
    const express = require('express');
    
    //创建express服务实例
    const app = express();
    
    //导入路由文件
    const memberRouter = require('./member.router');
    const userRouter = require('./user.router');
    
    //注册路由
    //使用app.use()函数可以分开写,可以连着写,即函数式编程, 例如:app.use(memberRouter).use(userRouter);
    //注意:这两个路由除去"http://127.0.0.1:3000"后的如果是同一个,假如都是"/list"。在注册时,可以在use()函数添加前缀,类似命名空间,例如:
    //app.use('/member',memberRouter);
    //app.use('/user',userRouter);
    //然后,访问时,路由的地址可以不用改变了,都是"http://127.0.0.1:3000/list"
    app.use(memberRouter); app.use(userRouter); //监听 app.listen(3000, ()=>{ console.log('服务器启动了!'); });

    在Postman中,分别访问对应路由组件的api请求,此处定义的路由的uri不一样,所以可以区分访问,访问结果分别如下:

    四、API

    更多关于Express路由的使用,请参考官方文档:http://www.expressjs.com.cn/guide/routing.html

  • 相关阅读:
    Task 5.1 电梯调度程序需求调研报告
    Task 4 求数组的连续子数组的最大和(团队合作)
    class 3 求数组中的最大值(单元测试)
    《你的灯亮着吗》读书笔记3
    优惠购书
    校友聊NABCD
    环状二维数组(改进版)
    环状二维数组
    环状一维数组
    二维数组最大值
  • 原文地址:https://www.cnblogs.com/XYQ-208910/p/12116133.html
Copyright © 2011-2022 走看看