老铁们,大家好,相信还有很多朋友对于koa服务器和koa中服务器对象的use方法的相关问题不太懂,没关系,今天就由我来为大家分享分享koa服务器以及koa中服务器对象的use方法的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!
一、koa中服务器对象的use方法***用于响应前端请求吗
use的设计其实是用于插入中间件的,处理一些通用的行为比如管理session。当然响应请求也是允许的。
但是对于业务比较复杂的场景,在这个地方响应请求的话后期会比较难维护。一般对于请求还是用 koa-router分路由用不同的模块处理。这也是目前web框架的主流做法。
二、Koa实现JWT用户认证需要哪些步骤
这次给大家带来Koa实现JWT用户认证需要哪些步骤,Koa实现JWT用户认证的注意事项有哪些,下面就是实战案例,一起来看一下。
一、前置知识
基于Token的身份验证
Koajs中文文档
Koa框架教程
二、环境
Microsoft Visual Studio 2017集成开发环境
Node.js v8.9.4J*ascript运行环境
三、开始动手,一步步来完善
1、创建基础的静态资源服务器、基础架构
以下是基本的代码,实现静态服务器,以及一个当token验证异常时候的处理。
下面我们将在这个基本代码下逐步增加注册、登录、信息的功能。
const path= require('path');//用于处理目录路径
const Koa= require('koa');// web开发框架
const serve= require('koa-static');//静态资源处理
const route= require('koa-route');//路由中间件
const jwt= require('jsonwebtoken');//用于签发、解析`token`
const jwtKoa= require('koa-jwt');//用于路由权限控制
const koaBody= require('koa-body');//用于查询字符串解析到`ctx.request.query`
const = new Koa();
const website={
scheme:'',
host:'localhost',
port: 1337,
join: function(){
return `${this.scheme}://${this.host}:${this.port}`
}
}
/* jwt密钥*/
const secret='secret';
/*当token验证异常时候的处理,如token过期、token错误*/
.use((ctx, next)=>{
return next().catch((err)=>{
if(err.status=== 401){
ctx.status= 401;
ctx.body={
ok: false,
msg: err.originalError? err.originalError.message: err.message
}
} else{
throw err;
}
});
});
/*查询字符串解析到`ctx.request.query`*/
.use(koaBody());
/*路由权限控制*/
//待办事项??
/* POST/api/register注册*/
//待办事项??
/* GET/api/login登录*/
//待办事项??
/* GET/api/info信息*/
//待办事项??
/*静态资源处理*/
.use(serve(path.join(dirname,'static')));
/*监听服务器端口*/
.listen(website.port,()=>{
console.log(`${website.join()}服务器已经启动!`);
});下面,我们将在注册、登录、信息的注释底下添加实现的代码。
2、路由权限控制
注册、登录接口、其它资源不需要认证,信息接口需要认证。
/*路由权限控制*/
.use(jwtKoa({ secret: secret}).unless({
//设置login、register接口,可以不需要认证访问
path: [
/^\/api\/login/,
/^\/api\/register/,
/^((?!\/api).)*$///设置除了私有接口外的其它资源,可以不需要认证访问
]
}));3、注册
/* POST/api/register注册*/
.use(route.post('/api/register', async(ctx, next)=>{
const body= ctx.request.body;
/*
* body={
* user:'御焱',
* password:'123456'
*}
*/
//判断 body.user和 body.password格式是否正确
//待办事项??
//判断用户是否已经注册
//待办事项??
//保存到新用户到数据库中
//待办事项??
//是否注册成功
let是否注册成功= true;
if(是否注册成功){
//返回一个注册成功的JOSN数据给前端
return ctx.body={
ok: true,
msg:'注册成功',
token: getToken({ user: body.user, password: body.password})
}
} else{
//返回一个注册失败的JOSN数据给前端
return ctx.body={
ok: false,
msg:'注册失败'
}
}
}));
/*获取一个期限为4小时的token*/
function getToken(payload={}){
return jwt.sign(payload, secret,{ expiresIn:'4h'});
}
3、登录
/* GET/api/login登录*/
.use(route.get('/api/login', async(ctx, next)=>{
const query= ctx.request.query;
/*
* query={
* user:'御焱',
* password:'123456'
*}
*/
//判断 query.user和 query.password格式是否正确
//待办事项??
//判断是否已经注册
//待办事项??
//判断姓名、学号是否正确
//待办事项??
return ctx.body={
ok: true,
msg:'登录成功',
token: getToken({ user: query.user, password: query.password})
}
}));
前端获取到token之后,可以保存在任意本地存储里。
4、信息
/* GET/api/info信息*/
.use(route.get('/api/info', async(ctx, next)=>{
//前端访问时会附带token在请求头
payload= getJWTPayload(ctx.headers.authorization)
/*
* payload={
* user:"御焱",
* iat: 1524042454,
* exp: 1524056854
*}
*/
//根据 payload.user查询该用户在数据库中的信息
//待办事项??
const info={
name:'御焱',
age: 10,
sex:'男'
}
let获取信息成功= true;
if(获取信息成功){
return ctx.body={
ok: true,
msg:'获取信息成功',
data: info
}
} else{
return ctx.body={
ok: false,
msg:'获取信息失败'
}
}
}));
/*通过token获取JWT的payload部分*/
function getJWTPayload(token){
//验证并解析JWT
return jwt.verify(token.split('')[1], secret);
}
访问需要认证的接口时,需要在request头附带Authorization:Bearer [token]字段。
相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!
推荐阅读:
Vue.js开发mpvue框架步骤详解
jquery fullpage插件添加头部与尾部版权相关
vue里使用sass配置步骤详解
三、如何评价node.js的koa框架
koa2框架在异步开发上采用async/await,抛弃了generator和co的做法,简化了异步编程流程。
在中间件使用方面,koa2采用了ctx参数,相较于express的req和res参数,这种设计更便于操作。
此外,koa2的中间件连接方式更为灵活,相较于express的串联式设计,koa2的中间件可以根据需要选择后续执行的位置,提供了更多的自定义空间。
例如,在开发服务器处理时间/日志的中间件时,koa2代码简洁,更易于理解和实现。
在错误处理上,koa2的友好度更高,减少了代码复杂度。
尽管如此,koa2的社区规模较小,且处于alpha版阶段,可能存在开发速度不稳定的问题。
在选择中间件时,需要考虑其适配*,例如使用passportjs时,需要留意其在koa1和koa2版本间的差异。
个人评价认为,koa2在设计上具有优势,简化了功能实现流程,但社区规模较小,可能会影响开发者体验。
虽然koa1与koa2在思想上一致,但koa2的实现更优雅。针对这个问题,koa提供了一个转换函数koa-convert,以帮助开发者从koa1迁移到koa2。
通用中间件大多已存在koa版,或者能轻松转换为koa版,满足开发需求。
在选择使用koa时,团队需具备足够的开发能力。总体来说,koa2是一个值得推荐的框架,尤其对于寻求简化异步开发流程的开发者。