用koa寫接口

koa作爲node服務的解決方案,可以寫接口,要用到以下中間件

  1. 路由 koa-router
  2. 協議分析 koa-body
  3. 跨域 @koa/cors
  4. josn格式化 koa-josn

koa-router

運用router.get(’/*’, function(){}); 可以對不同的請求進行分別處理

安裝:

npm install - S koa-router

應用
1、引用

const Koa = require('koa');
const Router = require('koa-router');

const app = new Koa();
const router = new Router();

2、使用

//路由攔截
router.post('/post', async (ctx) => {
    let { body } = ctx.request; // es6的寫法把ctx.request請求體的所有方法都放到body對象裏面去
    console.log(body);
    console.log(ctx.request);
    let aa = {};
    aa.status ='';
    aa.name = 'cx2';
    ctx.body = aa;
})

app.use(router.routes())
    .use(router.allowedMethods())   //把前面所有定義的方法添加到app應用上去

2、koa-body 和 @koa/cors

koa-body作爲Koa的中間件,對文件上傳和POST JSON,設置json文件的大小和上傳文件大小,都比較友好

@koa/cors主要是用於接口請求的跨域問題,,有了這個接口就會在返回數據的時候帶上Access-Control-Allow-Origin響應頭,默認允許所有請求方式跨域,ACCESS-Control-Allow0Origin默認爲*

1、安裝這兩個中間件

npm  install -S koa-body @koa/cors

栗子:
在這裏插入圖片描述
安裝結果 你就會在package.json中看到

"dependencies": {
    "@koa/cors": "^3.0.0",
    "koa": "^2.11.0",
    "koa-body": "^4.1.1",
    "koa-router": "^8.0.8"
  }

應用:
1、引入

const cors = require('@koa/cors');
const koaBody = require('koa-body');

2、app.use
使用中間件的時候要用app.use()這個方法,中間件的加載是有順序的,所以注意koaBody在cors前面

app.use(koaBody())
app.use(cors())  

3、koa-json

json pretty json進行格式化換行之類的 字符串轉化成json格式 常見的方法 日誌 處理
安裝

npm install -S koa-json

應用

app.use(json({pretty:false, param:'pretty'}));

4、prefix 給接口加前綴

給所有的接口加ac/v1的前綴

router.prefix('/ac/v1')

5、用postman測一下自己的接口

在這裏插入圖片描述
能用。

完整代碼

/**
 * koa作爲node服務的解決方案,
 * 路由 koa-router
 * 協議分析 koa-body koa-body作爲Koa的中間件,對文件上傳和PSOT JSON,設置josn的大小和文件上傳的大小,都比較友好,
 * 跨域 koa-cors
 * 使用中間件要用app.use()這個方法 中間件的加載要有順序的 所以koaBody放在cors前面
 * 路由的前綴
 * 獲取路由請求參數params
 * json pretty json進行格式化換行之類的 字符串轉化成json格式 常見的方法 日誌 處理
* */

const Koa = require('koa');
const Router = require('koa-router');
const cors = require('@koa/cors');
const koaBody = require('koa-body');
const json = require('koa-json');
const app = new Koa();
const router = new Router();
router.prefix('/ac/v1')

router.get('/',function (ctx) {
    console.log(ctx);
    ctx.body = 'hello world';
});
router.get('/api',function (ctx) {
    //get params = ctx.request.query
    const params = ctx.request.query;
    console.log(params);
    console.log(params);
    console.log(ctx);
    ctx.body = 'hello routerApi';
});
router.post('/post', async (ctx) => {
    let { body } = ctx.request; // es6的寫法把ctx.request請求體的所有方法都放到body對象裏面去
    console.log(body);
    console.log(ctx.request);
    let aa = {};
    aa.status ='';
    aa.name = 'cx2';
    ctx.body = aa;

})

app.use(koaBody())
app.use(cors())   
app.use(json({pretty:false, param:'pretty'}));
app.use(router.routes())
    .use(router.allowedMethods())   //把前面所有定義的方法添加到app應用上去

app.listen(3002);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章