老铁们,大家好,相信还有很多朋友对于koa服务器和koa中服务器对象的use方法的相关问题不太懂,没关系,今天就由我来为大家分享分享koa服务器以及koa中服务器对象的use方法的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!

一、koa中服务器对象的use方法***用于响应前端请求吗

use的设计其实是用于插入中间件的,处理一些通用的行为比如管理session。当然响应请求也是允许的。

但是对于业务比较复杂的场景,在这个地方响应请求的话后期会比较难维护。一般对于请求还是用 koa-router分路由用不同的模块处理。这也是目前web框架的主流做法。

二、Koa实现JWT用户认证需要哪些步骤

这次给大家带来Koa实现JWT用户认证需要哪些步骤,Koa实现JWT用户认证的注意事项有哪些,下面就是实战案例,一起来看一下。

一、前置知识

koa服务器 koa中服务器对象的use方法

基于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是一个值得推荐的框架,尤其对于寻求简化异步开发流程的开发者。