Koa使用

安装Koa

yarn add koa

Koa的使用

const Koa = require('koa'); //http,包装过的http

//创建一个http服务器,监听请求,http.createServer()
const app = new Koa();

//注册中间件函数
//next:中间件函数 —> 迭代器
app.use((ctx, next) => {
    //ctx: koa处理过的对象
    ctx.body = 'Hello';
    next();
})

app.use((ctx, next) => {
    ctx.body += 'Koa';
})

//监听当前机器的地址,端口
app.listen(3000);

客户端从发请求到看到内容

服务器:接收到请求(request)-> 处理请求,生成数据 -> 发送数据(response)
Koa:request -> middleware -> response
koa处理了request和response,我们需要做的是注册(编写)middleware

### 集成 JWT 进行身份验证 #### 安装必要的包 为了在 Koa 框架中实现 JWT 身份验证,需安装 `koa-jwt` 中间件。此中间件依赖于 `jsonwebtoken`,因此通常无需单独安装后者[^3]。 ```bash npm install --save koa-jwt ``` #### 创建 Token 创建 token 一般发生在用户成功登录后。通过 `jsonwebtoken.sign()` 方法来生成带有有效载荷(payload)和密钥(secret key)的 token[^2]。 ```javascript const jwt = require('jsonwebtoken'); // 登录逻辑处理函数 async function login(ctx) { const user = await User.findOne({ username: ctx.request.body.username }); if (user && user.password === ctx.request.body.password) { // 假设密码未加密存储 const token = jwt.sign({ id: user.id }, 'your_secret_key', { expiresIn: '1h' }); // 使用 secret key 签名并设置过期时间 ctx.body = { success: true, message: "Login successful", token }; } else { ctx.status = 401; ctx.body = { success: false, message: "Invalid credentials" }; } } ``` #### 设置 Middleware 为了让后续路由能够访问到解码后的 payload 数据,在应用层面配置 `koa-jwt` 中间件是非常重要的。这一步骤使得经过认证的请求可以在上下文中找到已解析的身份信息[^1]。 ```javascript const Koa = require('koa'); const Router = require('@koa/router'); const jwt = require('koa-jwt'); const app = new Koa(); const router = new Router(); app.use(jwt({ secret: 'your_secret_key' }).unless({ path: [/^\/login/], // 排除不需要鉴权的路径 })); router.get('/protected', async (ctx) => { ctx.body = { msg: 'This is a protected route.', userId: ctx.state.user.id }; // 访问受保护资源 }); app.use(router.routes()); app.listen(3000); console.log('Server running on port 3000...'); ``` 上述代码展示了如何利用 `koa-jwt` 来保护特定 API 路由免遭未经授权的访问尝试。当客户端发送包含有效 Bearer Token 的 HTTP 请求时,该 token 就会被自动提取、校验,并将其所含有的声明附加至当前请求对象(`context`)之中以便进一步操作使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值