异步的终极解决和koa2登陆

1、异步的终极解决

https://www.cnblogs.com/liusixin/p/6727060.html

var sleep = function (time) {
    return new Promise(function (resolve, reject) {
        setTimeout(function () {
            resolve();
        }, time);
    })
};

var start = async function () {
    // 在这里使用起来就像同步代码那样直观
    console.log('start');
    await sleep(3000);
    console.log('end');
};

start();

 

也就是先把异步事件用Promise 包装一下,然后不用 then,await出来,就可以把

 

异步完美解决为同步,根本不需要引用别人的包来帮助解决了

 

 

 

还是得靠

Promise这个

 

服务端,1同步化,

2、 Ts

 

2Promise

 

JavaScript的世界中,所有代码都是单线程执行的。

由于这个“缺陷”,导致JavaScript的所有网络操作,浏览器事件,都必须是异步执行。异步执行可以用回调函数实现:

 

3、 怎么ts 化,???,上次bug在哪?

 

 4koa登陆

https://www.itying.com/koa/article-index-id-60.html

const session = require('koa-session');

app.keys = ['some secret hurr'];
const CONFIG = {
    key: 'koa:sess',   //cookie key (default is koa:sess)
    maxAge: 86400000,  // cookie的过期时间 maxAge in ms (default is 1 days)
    overwrite: true,  //是否可以overwrite    (默认default true)
    httpOnly: true, //cookie是否只有服务器端可以访问 httpOnly or not (default true)
    signed: true,   //签名默认true
    rolling: false,  //在每次请求时强行设置cookie,这将重置cookie过期时间(默认:false)
    renew: false,  //(boolean) renew session when session is nearly expired,
};
app.use(session(CONFIG, app));

// 测试一下
router.get('/', async (ctx, next) => {

    ctx.response.body = '<h1>Index</h1>'+ctx.session.username;
});

router.get('/login', async (ctx, next) => {
    let request = ctx.request;
    let req_query = request.query;
    let name = req_query.name;
    let pwd = req_query.pwd;
    ctx.session.username =name;
    ctx.response.body = '<h1>login</h1>';
});


怎么来拦截每次的请求呢????


再加入拦截的,so easy



app.use(async (ctx, next) => {
    console.log(`Process ${ctx.request.method} ${ctx.request.url}...`);
    if( undefined ==  ctx.session.username ){
        ctx.response.body = '<h1>还没有登录,需要登录</h1>';
        return;
    }
    await next();
});

router.get('/login', async (ctx, next) => {
    let request = ctx.request;
    let req_query = request.query;
    let name = req_query.name;
    let pwd = req_query.pwd;
    ctx.session.username =name;
    ctx.response.body = '<h1>login</h1>';
});

再加上注销的,soeasy
router.get('/loginout', async (ctx, next) => {
    ctx.session.username =undefined;
    ctx.response.body = '<h1>loginout</h1>';
});

 

 

 

// koa 登陆d

posted @ 2019-05-06 19:01  cnchengv  阅读(127)  评论(0编辑  收藏  举报