国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

在?用Node.js實(shí)現(xiàn)一個(gè)http服務(wù)器框架?

Vicky / 2395人閱讀

摘要:功能演進(jìn)基礎(chǔ)服務(wù)器支持中間件支持異步中間件切換為裝飾增強(qiáng)細(xì)化統(tǒng)一異常處理細(xì)化流程控制自定義注解攔截管理注入組件標(biāo)記自動(dòng)處理返回值事務(wù)緩存框架權(quán)限認(rèn)證策略模式裝飾模式

功能演進(jìn): V1:

基礎(chǔ)http服務(wù)器

支持中間件

支持異步中間件

V1.x:

JS切換為TS

request/response裝飾增強(qiáng)

細(xì)化統(tǒng)一異常處理

細(xì)化流程控制

V2:

AOP自定義注解攔截

IOC管理注入@Controller/@Service組件

@Request標(biāo)記handler

@ResponseBody自動(dòng)處理返回值

事務(wù)

V2.x:

緩存框架

權(quán)限認(rèn)證(AOP,策略模式,裝飾模式)

V1: SOS.js
const http = require("http");
const url = require("url");
const EventEmitter = require("events");

const compose = (ctx) => (...funcs) => {
    if (funcs.length === 0) {
        return arg => arg
    }
    let lastIndex = funcs.length - 1;
    return funcs.reduceRight((a, b, index) => b(() => {
        if (index === funcs.length - 1) {
            return Promise.resolve();
        }
        if (lastIndex !== index) {
            return Promise.reject(new Error("can not call next() over once!"))
        }
        lastIndex--;
        try {
            return Promise.resolve(a(ctx));
        } catch (e) {
            return Promise.reject(e);
        }
    }), 1);
};


const applyMiddleware = (middles, ctx) => compose(ctx)(...middles);

class SOS extends EventEmitter {
    constructor() {
        this.middleWares = [];
        this.serve = http.createServer(async (req, res) => {
            const ctx = { req, res };
            const handler = applyMiddleware(this.middleWares, ctx);
            await handler(ctx);
            res.finisn || res.end();
        });
    }

    use(mid) {
        this.middleWares.push(mid);
    }

    listen(...agr) {
        this.serve.listen(...agr);
        console.log("starting");
    }

    onerror(err, ctx) {
        if (err.code === "ENOENT") {
            ctx.status = 404;
        }
        else {
            ctx.status = 500;
        }
        let msg = err.message || "000 error";
        ctx.res.end(msg);

        this.emit("error", err);
    }
}
test.js
const sos = new SOS();
sos.listen(9009);

sos.use((next) =>async (ctx) => {
    console.log("
pathname::",url.parse(ctx.req.url).pathname);
    ctx.res.write(new Date()+"");
    console.log("before 111");
    ctx.res.write("before 111
");
    await next();
    console.log("after 111");
    ctx.res.write("after 111
");
});
sos.use((next) =>async (ctx) => {
    console.log("before 222");
    ctx.res.write("before 222
");
    await next();
    console.log("after 222");
    ctx.res.write("end test222
");
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        console.log("timeout 222 ");
        ctx.res.write("timeout 222 
");
        return resolve();
      }, 3000);
    });
});
sos.use((next) =>async (ctx) => {
    console.log("before 333");
    ctx.res.write("before 333
");
    await next();
    console.log("after 333");
    ctx.res.write("end test333
");
});


文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/110006.html

相關(guān)文章

  • Express 實(shí)戰(zhàn)(一):概覽

    摘要:一個(gè)標(biāo)準(zhǔn)性的事件就是年的橫空出世。引擎快速處理能力和異步編程風(fēng)格,讓開發(fā)者從多線程中解脫了出來。其次,通過異步編程范式將其高并發(fā)的能力發(fā)揮的淋漓盡致。它也僅僅是一個(gè)處理請(qǐng)求并作出響應(yīng)的函數(shù),并無任何特殊之處。 showImg(https://segmentfault.com/img/remote/1460000010819116); 在正式學(xué)習(xí) Express 內(nèi)容之前,我們有必要從大...

    zhaochunqi 評(píng)論0 收藏0
  • Node Hero】4. 第一個(gè) Node.js HTTP 務(wù)器

    摘要:本文轉(zhuǎn)載自眾成翻譯譯者網(wǎng)絡(luò)埋伏紀(jì)事鏈接原文本章我會(huì)指導(dǎo)你啟動(dòng)一個(gè)簡(jiǎn)單的服務(wù)器,并開始為請(qǐng)求服務(wù)。現(xiàn)在,我們開始創(chuàng)建第一個(gè)服務(wù)器我們將模塊,并將服務(wù)器綁定到端口來監(jiān)聽。必須用如下方式啟動(dòng)服務(wù)器總結(jié)本章學(xué)習(xí)了如何從頭開始創(chuàng)建第一個(gè)服務(wù)器。 本文轉(zhuǎn)載自:眾成翻譯譯者:網(wǎng)絡(luò)埋伏紀(jì)事鏈接:http://www.zcfy.cc/article/1750原文:https://blog.risings...

    Coly 評(píng)論0 收藏0
  • 【全文】狼叔:如何正確的學(xué)習(xí)Node.js

    摘要:感謝大神的免費(fèi)的計(jì)算機(jī)編程類中文書籍收錄并推薦地址,以后在倉(cāng)庫(kù)里更新地址,聲音版全文狼叔如何正確的學(xué)習(xí)簡(jiǎn)介現(xiàn)在,越來越多的科技公司和開發(fā)者開始使用開發(fā)各種應(yīng)用。 說明 2017-12-14 我發(fā)了一篇文章《沒用過Node.js,就別瞎逼逼》是因?yàn)橛腥嗽谥跎虾贜ode.js。那篇文章的反響還是相當(dāng)不錯(cuò)的,甚至連著名的hax賀老都很認(rèn)同,下班時(shí)讀那篇文章,竟然坐車的還坐過站了。大家可以很...

    Edison 評(píng)論0 收藏0
  • 【全文】狼叔:如何正確的學(xué)習(xí)Node.js

    摘要:感謝大神的免費(fèi)的計(jì)算機(jī)編程類中文書籍收錄并推薦地址,以后在倉(cāng)庫(kù)里更新地址,聲音版全文狼叔如何正確的學(xué)習(xí)簡(jiǎn)介現(xiàn)在,越來越多的科技公司和開發(fā)者開始使用開發(fā)各種應(yīng)用。 說明 2017-12-14 我發(fā)了一篇文章《沒用過Node.js,就別瞎逼逼》是因?yàn)橛腥嗽谥跎虾贜ode.js。那篇文章的反響還是相當(dāng)不錯(cuò)的,甚至連著名的hax賀老都很認(rèn)同,下班時(shí)讀那篇文章,竟然坐車的還坐過站了。大家可以很...

    fengxiuping 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<