koa-csrf源码解析

介绍

CSRF tokens for Koa

针对Koa的CSRF tokens,它主要使用了csrf这个库。

简述工作流程

客户端请求页面:

  • 服务端为用户当前 session 生成 secret 值,并存到 session 里;
  • 根据 secret 生成 csrf token,存到 ctx._csrf;
  • 下发 csrf token 到客户端

用户写操作,比如发送 post 请求时:

  • 服务端获取客户端传递过来的 csrf token;

  • 服务端从当前 session 找到 secret 值;

  • 服务器用 secret 与接收的 csrf token 进行校验;

    阅读更多...

koa-send源码解析

介绍

Simple session middleware for Koa. Defaults to cookie-based sessions and supports external stores.

意为,Koa 简单的中间件。默认基于 cookie 的会话存储,支持终端存储。

阅读更多...

koa-jwt源码解析

介绍

Koa middleware for validating JSON Web Tokens.

意为Koa 中间件用于验证 JSON Web Tokens.。主要使用了jsonwebtoken这个库编码和验证。该库主要验证jwt来保证后续中间件执行的安全性。

demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
var Koa = require("koa");
var jwt = require("koa-jwt");

var app = new Koa();

// 验证token是否有效,过滤'/public'开头的的url
app.use(jwt({ secret: "shared-secret" }).unless({ path: [/^\/public/] }));

// 不被保护的中间件
app.use(function (ctx, next) {
if (ctx.url.match(/^\/public/)) {
ctx.body = "unprotected\n";
} else {
return next();
}
});

// 被保护的中间件
app.use(function (ctx) {
if (ctx.url.match(/^\/api/)) {
ctx.body = "protected\n";
}
});

app.listen(3000);
阅读更多...

koa-unless源码解析

介绍

Conditionally skip a middleware when a condition is met.

当条件符合时跳过中间件,npmjs 官方这样介绍。使用时需要将该库挂载到其他中间件上。它相当于被挂载中间件的一个壳,在执行时判断是否 next 跳过被挂载中间件。

阅读更多...

react-resize-aware源码解析

介绍

react-resize-aware 是一个 0 依赖,约 600 比特的 react hook。你可以使用它监听 resize 事件而不依赖间隔函数、循环、DOM 操作监听或 css 重绘。

基本使用

将该钩子函数防止在想要监听的 React 节点内部。他实际插入了一个不可见的 iframe 元素,还有 resize 的监听。

1
2
3
4
5
6
7
8
9
10
11
12
13
import React from "react";
import useResizeAware from "react-resize-aware";

const App = () => {
const [resizeListener, sizes] = useResizeAware();

return (
<div style={{ position: "relative" }}>
{resizeListener}
Your content here. (div sizes are {sizes.width} x {sizes.height})
</div>
);
};
阅读更多...

koa-send源码解析

介绍

Static file serving middleware.

意为静态文件服务中间件。简单来说就是,对于静态文件的获取,进行一系列的判断和错误处理,将命中文件的流放到 ctx.body,函数返回命中的文件路径。

阅读更多...

node-delegates源码解析

介绍

Node 方法和访问器委托实用程序。

delegates 官方如此介绍,实际上用于委托模式的实现。

demo

1
2
3
4
5
6
7
8
delegate(proto, "request")
.method("acceptsLanguages")
.method("acceptsEncodings")
.method("is")
.access("querystring")
.access("url")
.getter("subdomains")
.getter("protocol");
阅读更多...

node-only源码解析

介绍

Return whitelisted properties of an object.

意思是返回对象的白名单属性。,也就是只返回我们传入的属性。

demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var obj = {
name: "tobi",
last: "holowaychuk",
email: "tobi@learnboost.com",
_id: "12345",
};

var user = only(obj, "name last email");

// yields:
{
name: 'tobi',
last: 'holowaychuk',
email: 'tobi@learnboost.com'
}
阅读更多...

Koa源码解析

介绍

先来了解下 Koa,摘自[koa][https://koa.bootcss.com/]中文官网

Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。 Koa 并没有捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序。

源代码见[koajs/koa][https://github.com/koajs/koa]

demo

1
2
3
4
5
6
7
8
const Koa = require("koa");
const app = new Koa();

app.use(async (ctx, next) => {
ctx.body = "Hello world~";
});

app.listen(3000);
阅读更多...

给阿姨来一杯卡普基诺~

支付宝
微信