动态

详情 返回 返回

Koa基本使用 - 动态 详情

一、koa基本使用

依賴安裝

npm i koa

編碼

const Koa = require("koa");

const app = new Koa();

app.use(async ctx=>{
    ctx.body = 'hello Koa';
});

app.listen('5505',()=>{
    console.log('Server running at http://localhost:5505');
});

二、Koa常用中間件

1.路由

依賴安裝

npm i @koa/router

編碼

const Router = require('@koa/router');

const router = new Router();
router.get('/foo',ctx=>{
    ctx.body =' this is foo page';
});
app.use(router.routes()).use(router.allowedMethods());

2.靜態資源託管

依賴安裝

npm i koa-static koa-mount

編碼

const static = require("koa-static");
const path = require("path");
const mount = require("koa-mount");

// mount 可用於給中間件添加一個路由,這裏給託管的靜態資源添加一個/public路由前綴
app.use(mount("/public", static(path.join(__dirname, "./public"))));

3.合併中間件

依賴安裝

npm i koa-compose

編碼

const compose = require('koa-compose')

const a1 = (ctx,next)=>{
  console.log('a1');
  next();
}
const a2 = (ctx,next)=>{
  console.log('a2');
  next();
}
const a3 = (ctx,next)=>{
  console.log('a3');
  next();
}

app.use(compose([a1,a2,a3]))

三、處理請求

1.處理跨域

依賴安裝

npm i @koa/cors

編碼

const cors = require("@koa/cors");

app.use(
  cors({
    origin: "*",
  })
);

2.處理post帶參

依賴安裝

npm i koa-body

編碼

const koaBody = require("koa-body");

app.use(koaBody());

四、其它

1.重定向

編碼

router.get("/foo", (ctx) => {
  ctx.body = "foo page";
});
// 重定向針對的是同步請求
router.get("/bar", (ctx) => {
  ctx.redirect("/foo");
});

2.異步中間件

編碼

router.get("/page", async (ctx) => {
  const data = await util.promisify(readFile)("./public/views/index.html");
  ctx.type = "html";
  ctx.body = data;
});

3.錯誤捕獲

建議所有的處理函數都寫成async形式,調用next函數時加上await
編碼
方式一:自定義中間件

// 寫在最前面,因為是洋葱模型,可以捕獲內部所有中間件的錯誤
app.use(async (ctx) => {
  try {
    await next();
  } catch (err) {
    // 觸發app 的err事件
    ctx.app.emit('error',err,ctx);
    ctx.throw(404); // 500 Internal Server Error; 404 Not Found
  }
});

app.use(ctx=>{
  JSON.parse('jfskdjfsl')
})

方式二:監聽app的error事件

app.on('error',err=>{
  console.log('app err',err.message)
})

Add a new 评论

Some HTML is okay.