express:
var express=require(\'express\'); var app=express(); // 异常处理 app.use((req,res,next)=>{ try{ next(); }catch(ex){ res.send(ex.message); } }) app.use((req,res,next)=>{ console.log(1); // 1 next(); // 2 console.log(2); // 5 执行时机不确定,与是否异步有关 }); app.use((req,res,next)=>{ console.log(3); // 3 new Promise(resolve=>{ // 4 setTimeout(resolve,300); }).then(()=>{ next(); // 6 console.log(4); // 8 }) }); app.use((req,res)=>{ // 7 try{ res.send(\'Hello World\'); throw new Error(\'hehe\'); }catch(ex){ // 异常处理 } }); app.listen(3000);
koa:
const Koa=require(\'koa\'); const app=new Koa(); // 异常处理 app.use(require(\'./koa-error\')); process.on(\'unhandledRejection\',err=>{ console.error(`unhandledRejection: ${err.message}, stack: ${err.stack}`); }); process.on(\'uncaughtException\',err=>{ console.error(`uncaughtException: ${err.message}, stack: ${err.stack}`); }) app.use(async (ctx,next)=>{ console.log(1); // 1 next(); // 2 -----以next为分界线,会先执行next之前的方法,再执行next之后的方法 console.log(2); // 8 }); app.use(async (ctx,next)=>{ console.log(3); // 3 await new Promise(resolve=>{ setTimeout(resolve,300); }); // 4 await next(); // 5 console.log(4); // 7 }); app.use(async (ctx,next)=>{ ctx.body=\'hello world\'; }); app.listen(3000);