nodejs-koa-blog
nodejs-koa-blog copied to clipboard
从90多个star一直关注到现在的433个
看着楼主大神的不断进步,很是崇拜,也一直在跟着你的项目一直在学习。 注意到好像重构了,跟之前的代码完全不一样了。 现在疑惑的地方有三个,大神能给我讲讲吗? 1.require-directory 自动路由加载 这个是体现在哪里? 2.看文档里token需要base64转码了? 之前的token在代码里都是前面加“bearer:”就行 3.关于验证器这块有相关的文章吗?直接看代码的话有点看不懂 多谢!
看着楼主大神的不断进步,很是崇拜,也一直在跟着你的项目一直在学习。 注意到好像重构了,跟之前的代码完全不一样了。 现在疑惑的地方有三个,大神能给我讲讲吗? 1.require-directory 自动路由加载 这个是体现在哪里? 2.看文档里token需要base64转码了? 之前的token在代码里都是前面加“bearer:”就行 3.关于验证器这块有相关的文章吗?直接看代码的话有点看不懂 多谢!
Hello,谢谢您的关注和支持。是的,这个重构了,变得更加可维护性了,我现在回答一下你的问题:
- require-directory 自动路由加载 这个是体现在哪里?
简单说明一下:就是模块化的一个体验,利用代码自动加载进来了,在app.js里面有一段:
// app.js
const InitManager = require('./core/init')
// 然后再init.js里面做的工作就是初始化一些项目配置,正如自动加载路由:
// 加载全部路由
static initLoadRouters() {
// 绝对路径
const apiDirectory = `${process.cwd()}/app/api`
// 路由自动加载
requireDirectory(module, apiDirectory, {
visit: whenLoadModule
})
// 判断 requireDirectory 加载的模块是否为路由
function whenLoadModule(obj) {
if (obj instanceof Router) {
InitManager.app.use(obj.routes())
}
}
}
// 上面的代码就是写了一段代码自动引入文件注册的意思
- 看文档里token需要base64转码了?
这个是HTTP Basic auth认证:代码链接,看文件里面的代码:
Util.ajax.interceptors.request.use(config => {
// 这里
config.headers['Authorization'] = _encode();
return config
}, error => {
return Promise.reject(error)
})
// 转码token
function _encode() {
const token = Vue.ls.get("token");
const base64 = Base64.encode(token + ':');
return 'Basic ' + base64
}
// 至于:之前的token在代码里都是前面加“bearer:”就行,之前的验证是Bear Token,现在是Basic auth认证
- 关于验证器这块有相关的文章吗?
复习一下原型链,看下源码:链接,
你百度Google搜下JS验证器,koa2参数验证器,也应该很多这种介绍,原理就是封装查询传入的参数是否存在,可以在原型链上面一层一层查询是否查询得到。
简单回答了一下,如果有什么问题再问我吧,加油:)
看着楼主大神的不断进步,很是崇拜,也一直在跟着你的项目一直在学习。 注意到好像重构了,跟之前的代码完全不一样了。 现在疑惑的地方有三个,大神能给我讲讲吗? 1.require-directory 自动路由加载 这个是体现在哪里? 2.看文档里token需要base64转码了? 之前的token在代码里都是前面加“bearer:”就行 3.关于验证器这块有相关的文章吗?直接看代码的话有点看不懂 多谢!
Hello,谢谢您的关注和支持。是的,这个重构了,变得更加可维护性了,我现在回答一下你的问题:
- require-directory 自动路由加载 这个是体现在哪里?
简单说明一下:就是模块化的一个体验,利用代码自动加载进来了,在app.js里面有一段:
// app.js
const InitManager = require('./core/init')
// 然后再init.js里面做的工作就是初始化一些项目配置,正如自动加载路由:
// 加载全部路由
static initLoadRouters() {
// 绝对路径
const apiDirectory = `${process.cwd()}/app/api`
// 路由自动加载
requireDirectory(module, apiDirectory, {
visit: whenLoadModule
})
// 判断 requireDirectory 加载的模块是否为路由
function whenLoadModule(obj) {
if (obj instanceof Router) {
InitManager.app.use(obj.routes())
}
}
}
// 上面的代码就是写了一段代码自动引入文件注册的意思
- 看文档里token需要base64转码了?
这个是HTTP Basic auth认证:代码链接,看文件里面的代码:
Util.ajax.interceptors.request.use(config => {
// 这里
config.headers['Authorization'] = _encode();
return config
}, error => {
return Promise.reject(error)
})
// 转码token
function _encode() {
const token = Vue.ls.get("token");
const base64 = Base64.encode(token + ':');
return 'Basic ' + base64
}
// 至于:之前的token在代码里都是前面加“bearer:”就行,之前的验证是Bear Token,现在是Basic auth认证
- 关于验证器这块有相关的文章吗?
复习一下原型链,看下源码:链接,
你百度Google搜下JS验证器,koa2参数验证器,也应该很多这种介绍,原理就是封装查询传入的参数是否存在,可以在原型链上面一层一层查询是否查询得到。
简单回答了一下,如果有什么问题再问我吧,加油:)
非常详细,谢谢梁大神!
还有最后一个小问题,让我很疑惑(后来才看到的,可能要再麻烦您花费一点时间写一下,真是不好意思)
就是里面的
new Auth(AUTH_ADMIN).m
我知道是一定要权限大于等于admin的意思才能通过这个接口的权限校验的意思,但是router原来的的方法定义是router.delete('/article/:id', async (ctx)
,为什么中间加了一个new Auth(AUTH_ADMIN).m
方法依然能够成功使用并且加了这个之后就能做到权限校验呢?
麻烦了!
非常详细,谢谢梁大神! 还有最后一个小问题,让我很疑惑(后来才看到的,可能要再麻烦您花费一点时间写一下,真是不好意思)
就是里面的
new Auth(AUTH_ADMIN).m
我知道是一定要权限大于等于admin的意思才能通过这个接口的权限校验的意思,但是router原来的的方法定义是router.delete('/article/:id', async (ctx)
,为什么中间加了一个new Auth(AUTH_ADMIN).m
方法依然能够成功使用并且加了这个之后就能做到权限校验呢? 麻烦了!
简单来说,new Auth(AUTH_ADMIN).m
也是一个中间件,这个中间件做的事情是控制权限,你可以在【链接】这里看代码理解一下,原理就是登陆后下发的token就包含了权限的级数,然后如果需要判断权限的,就在这个中间件里面判断,最后得出判断的结果是否通过。记住,koa2都是基于洋葱模型应用的,去学习关于koa2的中间件原理会更加理解,如果有什么问题再问我吧,加油:)
也就是说router.get、router.post等方法的参数({path},A, B, C, async(ctx) )中间的 A,B,C也会被当做中间件添加吗?:) 因为以前都是router.get({path}, async(ctx))这样直接用的 , 不知道还能这样添加中间件(见笑了) 我印象中添加中间件不都是app.use(某中间件)这样类型的吗?:) 为什么能这样添加呢?
也就是说router.get、router.post等方法的参数({path},A, B, C, async(ctx) )中间的 A,B,C也会被当做中间件添加吗?:) 因为以前都是router.get({path}, async(ctx))这样直接用的 , 不知道还能这样添加中间件(见笑了) 我印象中添加中间件不都是app.use(某中间件)这样类型的吗?:) 为什么能这样添加呢?
是啊,但是有一点注意:要确保洋葱模型的机制,向A,B,C这些中间件需要添加async/await控制好异步:)
梁老师, 后期有空的话 可以再加个redis集成不 非常想学!