优化代码
分离app.js中的功能代码
由于只想在app.js中引入一些模块,做一些基础的配置工作,并不想把实现具体功能的代码写在这个文件中,所以要把功能代码从app.js文件中分离出去。
例如,把app.use('/admin', 请求处理函数)
中app.use()保留,而把第二个参数,即请求处理函数,分离出去。
在blog文件夹下新建一个middleware的文件夹,再在这个文件夹之下新建一个loginGuard.js,存放登录拦截的代码。
把请求处理函数剪切进去,并起名const guard = 挪进来部分
。
此时loginGuard.js是一个模块,在默认情况下,模块外部是访问不到的。所以要把这个方法通过module.exports = guard;
暴露出去。
在外部引入这个模块的时候,会直接得到guard这个方法。所以,app.js中,直接
app.use('/admin', require('./middleware/loginGuard'));
可以看到,未登录状态下登录拦截功能依然奏效,说明代码没有问题。
优化admin.js中的代码
在一个真实的项目中,路由有非常多,如果把所有的代码都放置在admin.js中,那么这个文件就会变得非常非常的庞大。所以接下来要继续对当前文件进行优化。
把admin.js变成路由列表,把路由处理代码,即路由方法的第二个参数,分离到单独的文件中去。
在route文件夹下新建admin文件夹,专门为/admin准备。在admin文件夹下会建立很多文件,每一个文件都存放着路由请求函数,然后再在admin.js中需要用到路由请求函数的地方,通过require的方法引入。
需要注意的是,在移动路由请求函数之后,要观察函数中是否有用到其他模块,如果有用到,不仅要把这些模块的请求从admin.js中移动过来,还需要修改一些模块的路径,否则将找不到这些模块。
例如login.js
引入user.js时,要把
const { User } = require('../model/user')
修改为
const { User } = require('../../model/user');
最后要将函数暴露出去。
而使用
module.exports = async (req, res) => {...}
效果也是一样的,省去了一个变量。
完成以后,登录功能正常。