nodejs入门-新手入门2-koa学习

> # 前言

  nodejs的封装框架有很多,比如egg,express,nestjs,koa等,但由于我一开始接触的koa,而且感觉也相对比较简单所以也就用koa了。

> # 入门

## 安装


`npm install koa`即可




## 简单使用


```javascript

// app.js

const Koa = require('koa');

const app = new Koa();

app.use(async (ctx, next) => {

ctx.body = {

code: 0,

msg: '成功'

}

});

app.listen(3000);

// 然后node app.js然后打开localhost:3000就可获得{code:0,msg:'成功'}这串文字

```

## async和await的使用


```javascript

const Koa = require('koa');

const app = new Koa();

// 第一个中间件

app.use(async (ctx, next) => {   

await next(); // 此处等待next(),所以暂时不执行括号内接下去的代码,进入到下一个中间件的代码,下一个中间件代码执行完毕后才返回继续执行

console.log('t3:'+ctx.response.get('X-Response-Time'))   

console.log(`method: ${ctx.method}  url: ${ctx.url}`)

});

// 第二个中间件

app.use(async (ctx, next)=>{   

const start = Date.now();   

console.log('t1:'+start);   

await next();   

const ms = Date.now() - start;   

console.log('t2:'+ms);   

ctx.set('X-Response-Time', `${ms}ms`);

});

// 第三个中间件

app.use(async (ctx, next)=>{   

console.log('hello world');   

ctx.body = 'hello world';

})

app.listen(9000);

// 执行的结果:

// t1: 15758120938358

// hello world

// t2: 19

// t3: 19ms

// method:GET  url: /

// 这块主要让你了解中间件,async异步的await执行逻辑,以及ctx中包含了几乎所有页面你中输入输出的东西

```

## koa的插件:

- **koa-router:api的url设定**

```javascript

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

const router = new Router();

// 接口为/login,post传参

router.post('/login', async (ctx, next) => {   

const req = ctx.request.body;   

const user = await user_model.findOne({       

account: req.account   

}, {__v: 0, _id: 0});   

ctx.status = 200;   

if (!user) {       

ctx.body = {           

code: 0,           

msg: '账户或密码错误'       

}   

}   

const userId = user.uesrId;   

const pass = await password_model.findOne({       

userId   

}, {hash: 1});   

// 验证输入的命名是否符合加密后的hash值

const match = await passport.validate(req.password, pass.hash);   

if (match) {       

return ctx.body = {           

code: 1,           

msg: '登陆成功',           

data: user       

}           

}   

ctx.body = {       

code: 1,       

msg: '账户或密码错误',   

}

});

module.exports = router;

// server/app.js

const user_router = require('./routes/api/user_router.js');

// 在koa-router插件中,要求在中间件user_router.routes()被调用后再调用allowedMethods()

app.use(user_router.routes()).use(user_router.allowedMethods());

```




- **koa2-cors:解决跨域问题的插件**

```javascript

// 使用:在router之前调用

// app.js

const cors = require('koa2-cors');

app.use(cors());

```




- **koa-bodyparser:解析请求体的插件**

```javascript

// 使用:在router之前调用

// app.js

const bodyParser = require('koa-bodyparser');

app.use(bodyParser ());

```




你可能感兴趣的:(nodejs入门-新手入门2-koa学习)