Express子应用程序以及创建模块路由

2022-03-29  本文已影响0人  听书先生

express模块每一次执行都会创建一个应用,而每一个子应用都会通过use的方法挂载到主应用上。
需要注意的是:只有主应用程序能挂载端口号,因为每一个子应用挂载端口的话,无法找到入口程序

1、创建子应用程序game.js和user.js

// 游戏部分的中间件
const express = require('express');

const game = express();

game.use('/', (req, res, next) => {
    res.send('/game')
})

module.exports = game;
// 用户部分的中间件
const express = require('express');

const user = express();

user.use('/', (req, res, next) => {
    res.send('/user')
})

module.exports = user;

2、创建一个主入口程序

const express = require("express");
const app = express();
const game = require("./app/game.js");
const user = require("./app/user.js");

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

app.use((err, req, res, next) => {
   res.status(500).send(`页面异常.`); // 如果请求返回的状态码为500,那么抛出错误
})

app.listen(3000, () => console.log('http://localhost:3000'))

Router路由模块化:
express.Router类可以创建模块化,可以挂载路由对象.

创建game游戏模块(先创建一个routes文件目录,routes下存放的则是你的路由模块,比如:你有游戏模块game以及用户模块user,则可以创建gameRouter.js和userRouter.js文件)

gameRouter.js:

const express = require("express");

const gameRouter = express.Router();
const game = require('./game/game.js')

// 游戏模块路由
gameRouter.post('/', game.addGame);
gameRouter.delete('/:uid', game.deleteGame);
gameRouter.delete('/', game.deleteAllGame);
gameRouter.put('/', game.putGame);
gameRouter.get('/:uid', game.qryGame);
gameRouter.get('/', game.qryAllGame);

module.exports = gameRouter;

我们将game模块下所有的接口数据均放在一个game.js文件中,这样便于模块化管理
game.js代码:

// 所有game模块的接口数据
const game = {
    // 新增游戏名称
    addGame: (req, res) => {
        res.send('新增了一个游戏')
    },
    // 1. 删除单个
    deleteGame: (req, res) => {
        let {
            uid
        } = req.params;
        res.send(`删除${uid}游戏名称`)
    },
    // 2. 删除所有
    deleteAllGame: (req, res) => {
        res.send(`删除所有的游戏名称`)
    },

    // 修改游戏名称
    putGame: (req, res) => {
        res.send(`修改游戏名称`)
    },

    // 查询
    // 1. 查询某一个的详情
    qryGame: (req, res) => {
        let {
            uid
        } = req.params;
        res.send(`查询${uid}游戏名称`)
    },
    // 2. 查询所有数据
    qryAllGame: (req, res) => {
        res.send(`查询所有的游戏名称`)
    },
};


module.exports = game;

最后我们在主程序模块导入gameRouter模块

const express = require("express");
const app = express();

const gameRouter = require("./routes/gameRouter.js");


app.use('/game', gameRouter);

app.use((err, req, res, next) => {
   res.status(500).send(`页面异常.`); // 如果请求返回的状态码为500,那么抛出错误
})

app.listen(3000, () => console.log('http://localhost:3000'))

路由模块化对于非常多且复杂的业务逻辑时处理起来是非常简洁的。
接口测试:

图1.png
图2.png
图3png
上一篇下一篇

猜你喜欢

热点阅读