Node.js后端开发 - 进阶篇 #9 express框架之路由模块的封装2(相对安全)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/YuDBL/article/details/102583398

目录

一、前言

二、路由模块的封装2(相对安全)

模型图思路参考

步骤1:写主模块app.js

步骤2:写配置模块 config.js

步骤3:写路由模块 router.js

三、路由代码思路分析总结


一、前言

上一篇文章我们讲了express路由模块的封装,以及复习了npm init -y初始化项目、express的安装等知识点。详见可参考博文:Node.js后端开发 - 进阶篇 #8 express框架之路由模块的封装1 上篇文章对express路由模块的封装是我们直接可以想到的思维方式,虽然这么写可以实现功能,但是express并不推荐这么写,不太安全。这篇文章我们将基于上篇路由模块的封装代码进行修改

二、路由模块的封装2(相对安全)

模型图思路参考

项目初始化和express安装使用这里就不说了,可见上一篇文章。首先我们看一个模型图

扫描二维码关注公众号,回复: 7621628 查看本文章

1、首先在 router.js 里面创建一个路由对象,

2、用 router 对象去设置一些路由,如:get、post等,设置完成以后把 router 对象返回给 app.js

3、在 app.js里面就能拿到这个 router 对象了,

4、把这个设置好的 router 对象通过 use 函数与 app 对象相关联

5、相关联以后,router.js 里面的路由就都能启作用了

这种做法就不需要我们把 app 对象传递给 router.js,下面我们直接开始正式代码( 已经有详细注释,就不多说了 )

步骤1:写主模块app.js


// app.js 模块职责:负责启动服务

//1. 加载 express 模块
var express = require('express');
//加载 config.js 模块
var config = require('./config.js');
//加载路由模块
var router = require('./router.js');

//2. 创建 app 对象
var app = express();

// 这个router,它既是一个对象也是一个函数
// 这个函数,它也是一个中间件
// 我们可以打印看看:
console.log(router.toString());
// 看源码,
// function router(req, res, next) {
//    router.handle(req, res, next);
//  }
//它是一个函数,里面调用了router的handle方法


//3. 启动路由
// 设置 app 和 router 相关联
// 这个router,它既是一个对象也是一个函数
// 这个函数,它也是一个中间件
app.use('/', router);

//4. 启动服务
app.listen(config.port, function () {
    console.log('http://localhost:'+config.port);
});


步骤2:写配置模块 config.js


// 配置模块: 主要职责是负责保存项目中的配置信息

module.exports = {
    port : 3000
};


步骤3:写路由模块 router.js


//路由模块:主要负责路由判断

//1. 创建一个 router 对象(router 对象既是一个对象,也是一个函数)
var express = require('express');
var router = express.Router();

//2. 通过 router 对象设置(挂载)路由
router.get('/', function (req, res) {
     console.log("当前根目录");
});

router.get('/index', function (req, res) {
    console.log("index");
}); 

//3. 返回 router 对象
module.exports = router;

三、路由代码思路分析总结

// 当我们运行路由代码,如代码

router.get('/', function (req, res) {
    console.log("根目录");
});

router.get('/index', function (req, res) {
    console.log("index");
 }); 

// 这两个路由的请求并没有发生,它只是配置设置好了路由。其实我们在这里设置路由的含义是:

// 内部它会帮我们生成保存一个路由表,这个路由表是以键值对的形式存在。

// 如:我们可以把请求方法(get)和请求路径('/') 看作为键,

// 把执行的回调函数 function (req, res) { } 看作为值。

// 然后 router 设置挂载完以后,我们暴露返回 router 对象 module.exports = router;

// 然后我们在 app.js 里面,加载路由模块。var router = require('./router.js');

// 拿到 router 对象,它里面就是一个路由表,路由表里面是一堆键值对形式的路由。

// 然后通过 app.use('/', router); 关联app对象,把 router 对象的路由表设置给 app 对象

// 另外需要注意:

app.use('/', router);
app.use(router);

// 它们是等价的。下面两个函数的写法也是等价的

app.use('/', function (params) {

});

app.use(function (params) {

);

// 也就是说第一个参数不传,它会自动默认传根目录路径。

// 有兴趣的朋友可以去看看源码,express 的源码都在这个 node_modules/express/lib 下面。

猜你喜欢

转载自blog.csdn.net/YuDBL/article/details/102583398