Koa 中实现 chunked 数据传输 中介绍了如何在 Koa 中实现 假如我们想监听后台的请求,并将监听到的数据打印到页面。那么复用 Koa 在 app 上有提供一个 实现后代码大概是这样子: var Koa = require("koa");
var Router = require("@koa/router");
const PORT = 3000;
var app = new Koa();
var router = new Router();
const requestLogger = async (ctx, next) => {
await next();
ctx.app.emit(`response`, ctx);
};
app.use(requestLogger);
router.get("/", (ctx, next) => {
ctx.body = "hello world";
});
router.get("/api", (ctx, next) => {
ctx.body = {
status: 0,
foo: "bar"
};
});
router.get("/test", (ctx, next) => {
ctx.body = "hello test";
});
router.get("/monitor", async ctx => {
const res = ctx.res;
ctx.status = 200;
res.setHeader("Content-Type", "text/html");
res.write(`<h3>net monitor<h3>`);
return new Promise(() => {
ctx.app.on("response", data => {
res.write(`
<details>
<summary>
<a hre="${data.url}">${data.url}</a>
</summary>
<pre>${JSON.stringify(data.body, null, 2)}<pre>
</details>
`);
});
});
});
app.use(router.routes()).use(router.allowedMethods());
app.listen(PORT);
console.info(`server started at http://localhost:${PORT}`);
运行效果: 利用 chunked 类型响应实现后台请求的监听 问题
但如果仅用于调试数据,比如查看页面发生了哪些请求,返回了什么数据,这种一次性暂时的需求,还是没问题的。 相关资源 |
原文:https://www.cnblogs.com/Wayou/p/koa_request_monitor.html