node.js + koa 常用第三方中间件 以及登录小案例

9 篇文章 0 订阅

koa

  • 代码编写上避免了多层的嵌套异步函数调用 async await来解决异步

    • async await 需要依赖于promise

  • 更轻... 减少了内置的中间件 express.static处理静态资源的内置中间件 express.Router() 路由

  • 启动步骤

    • 引入Koa构造函数对象 const Koa = require('koa')

    • 创建服务器示例对象 const app = new Koa();

    • 配置中间件 app.use(做什么?)

    • 监听端口启动服务器 app.listen(8888);

  • 做什么? (函数参数说明)

    • context上下文对象: 该对象类似原生http中的 req + res

      • 该对象的req,res属性也存在,就是原生没有包装过的req,res

      • 简单说: context 对象就是从请求到响应 过程中的一个描述对象

    • next函数:调用下一个中间件

  • request(请求对象): 其中包含客户端请求的相关信息

  • response(响应对象): 包含响应数据的具体操作

request常用属性

ctx.request.url="xxx"
ctx.request.method="xxx"
ctx.request.headers ="xxx"

 

 response常用属性



 ctx.response.set(ctx.set)  
 ctx.response.status ='xxx'
 ctx.response.body = 'xxx'

第三方中间件  用一个小登录案例来描述 koa-bodyparser   koa-router  koa-static  koa-art-template koa_session

/**
 * @author  zsw
 * @date  2019/7/25 20:05
 * @version 1.0
 */

const Koa = require('koa');

//引入
const Router = require('koa-router');
const render = require('koa-art-template');
const static = require('koa-static');
const path = require('path');
const session = require ('koa-session');

const bodyParser = require('koa-bodyparser');
let app = new Koa();
render(app,{
    root:path.join(__dirname,'./view'),
    extname:'.html',
    debug:process.env.NODE_ENV !== 'production'
});
let router = new Router();
app.keys = ['some secret hurr'];
const CONFIG = {
    key: 'koa:sess',
    maxAge: 86400000,
    overwrite: true,
    httpOnly: false, //不许在客户端操作session
    signed: false,//保证数据不被串改
    rolling: false,
    renew: false,
};
app.use(session(CONFIG,app))
router.get('/',async (ctx) =>{
    ctx.render('index');
});
router.post('/login',async (ctx)=>{
    //获取用户名 和密码123
    let username = ctx.request.body.username;
    let password = ctx.request.body.password;
    if(username != 'abc' || password != '123') {
        // koa中的异常处理
        ctx.set('content-type','text/html;charset=utf-8');
        ctx.throw(200, `小钟马上就来修理^_^`);
        // return;
    } else {
        // 使用session保存数据
        ctx.session.user = {
            username:'abc'
        }
        ctx.body = '登录成功';
    }
}).get('/list',ctx=>{
    ctx.body = `当前登录用户为:` + ctx.session.user.username
})

//静态资源
app.use(static(path.resolve('./public')));
app.use(bodyParser());
app.use(router.routes());
app.use(router.allowedMethods());

// 错误处理
app.on('error', async (err, ctx) => {
    console.log(err);

});
app.listen(8080,()=>{
    console.log('run');
})

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值