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

資訊專欄INFORMATION COLUMN

node Express 框架

supernavy / 2604人閱讀

哈。github的地址已經(jīng)更換,求start
https://github.com/mySoul8012

繼續(xù)~
Express框架

簡(jiǎn)單介紹一下

Express事實(shí)上Node內(nèi)置的http模塊上構(gòu)建的一層抽象。理論上所有Express實(shí)現(xiàn)的功能都能用Node實(shí)現(xiàn)
核心特征;

設(shè)置中間件響應(yīng)http請(qǐng)求

定義路由表,執(zhí)行不同的http請(qǐng)求

先模板傳遞參數(shù),來(lái)動(dòng)態(tài)的渲染html文件

一些網(wǎng)址

npm的Express https://www.npmjs.com/package...
項(xiàng)目地址 https://github.com/expressjs/...
網(wǎng)址和文檔 http://expressjs.com/
翻譯的中文文檔 http://expressjs.com/zh-cn/

安裝Express

使用npm安裝,并將其保存進(jìn)入依賴列表中
由于一堵高不可攀的墻大人的問(wèn)題,所以呢,被迫使用cnpm,使用來(lái)自淘寶的鏡像,由淘寶完成鏡像的同步
節(jié)省一點(diǎn)點(diǎn)寶貴的時(shí)間(^o^)/

全新安裝的需要安裝淘寶的鏡像 https://npm.taobao.org/ 使用cnpm代替npm完成安裝

-save 的意思為自動(dòng)更新依賴文件,依賴文件為package.json

PS C:UsersmingmDesktop	estExpress> cnpm install express --save
√ Installed 1 packages
√ Linked 46 latest versions
√ Run 0 scripts
Recently updated (since 2018-07-21): 1 packages (detail see file C:UsersmingmDesktop	estExpress
ode_modules.recently_updates.txt)
√ All packages installed (51 packages installed from npm registry, used 3s(network 3s), speed 291.62kB/s, json 47(354.74kB), tarball 535kB)
PS C:UsersmingmDesktop	estExpress>

查看依賴pacage.json文件

{
  "dependencies": {
    "express": "^4.16.3"
  }
}

可以看到依賴的是express的4.16.3版本

查看一下目錄

PS C:UsersmingmDesktop	estExpress> ls


    目錄: C:UsersmingmDesktop	estExpress


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        2018/7/28     18:35                node_modules
-a----        2018/7/28     18:35             53 package.json


PS C:UsersmingmDesktop	estExpress>

可以查看到有一個(gè)node_modules目錄,該目錄保存的是npm包

一些還需要安裝的模塊

body-parser 一個(gè)node的中間件 用于處理JSON,等和URL的編碼的處理
https://www.npmjs.com/package...
文檔以及項(xiàng)目地址 https://github.com/expressjs/...
cookie-parser 一個(gè)負(fù)責(zé)解析Cookie的工具可以將傳過(guò)來(lái)的Cookie將其轉(zhuǎn)換為對(duì)象
https://www.npmjs.com/package...
multer node.js的中間件 處理表單數(shù)據(jù)
項(xiàng)目地址 https://github.com/expressjs/...
npm https://www.npmjs.com/package...
自訴文件 https://github.com/expressjs/...
原版的自述文件 https://github.com/expressjs/...
好啦。一共是一塊安裝了3個(gè)模塊
繼續(xù)使用淘寶源

PS C:UsersmingmDesktop	estExpress> cnpm install body-parser --save
√ Installed 1 packages
√ Linked 0 latest versions
√ Run 0 scripts
√ All packages installed (used 248ms(network 242ms), speed 23.48kB/s, json 1(5.68kB), tarball 0B)
PS C:UsersmingmDesktop	estExpress> cnpm install cookie-parser --save
√ Installed 1 packages
√ Linked 0 latest versions
√ Run 0 scripts
√ All packages installed (used 264ms(network 258ms), speed 4.99kB/s, json 1(1.29kB), tarball 0B)
PS C:UsersmingmDesktop	estExpress> cnpm install multer --save
√ Installed 1 packages
√ Linked 21 latest versions
√ Run 0 scripts
√ All packages installed (22 packages installed from npm registry, used 1s(network 1s), speed 307.56kB/s, json 22(92.57kB), tarball 343.86kB)
PS C:UsersmingmDesktop	estExpress>

完成三個(gè)模塊的安裝
查看一下依賴文件

{
  "dependencies": {
    "body-parser": "^1.18.3",
    "cookie-parser": "^1.4.3",
    "express": "^4.16.3",
    "multer": "^1.3.1"
  }
}

依賴四個(gè)模塊

創(chuàng)建一個(gè)框架實(shí)例

輸出hello world!

// app.js文件
var express = require("express");
var app = express();

app.get("/", (req, res) => {
    res.send("hello world!");
});

var server = app.listen(1938, () => {
    var host = server.address().address;
    var port = server.address().port;

    console.log("%s:%s", host, port);
})
PS C:UsersmingmDesktopindexExpress> node app.js
:::1938

此程序會(huì)監(jiān)聽(tīng)1938上的連接,當(dāng)有連接傳入的時(shí)候,應(yīng)用程序會(huì)以hello world!進(jìn)行響應(yīng),然后將其返回。

路由

路由決定了由誰(shuí)響應(yīng)http請(qǐng)求,通過(guò)提取GET和POST請(qǐng)求的參數(shù),下面繼續(xù)擴(kuò)展程序

PS C:UsersmingmDesktopindexExpress> node app.js
{ address: "::", family: "IPv6", port: 1937 }
var express = require("express");
var app = express();

// 輸出hello world
app.get("/", (req, res) => {
    console.log("輸出對(duì)于主頁(yè)的GET請(qǐng)求");
    res.send("Hello GET!");
});

// post請(qǐng)求
app.post("/", (req, res) => {
    console.log("主頁(yè)post請(qǐng)求");
    res.send("Hello POST");
});

// 對(duì)于/del_user的頁(yè)面響應(yīng)
app.get("/del_user", (req, res) => {
    console.log("這是對(duì)于頁(yè)面 /del_user頁(yè)面的響應(yīng)");
    res.send("Hello del_user");
    res.send("你好哈! 這里已經(jīng)將頁(yè)面進(jìn)行刪除");
});

// /list_user 頁(yè)面的GET請(qǐng)求
app.get("/list_user", (req, res) => {
    console.log("這里是對(duì) /list_user頁(yè)面的請(qǐng)求");
    res.send("Hello list_user");
});

// /對(duì)頁(yè)面abcd abcdxcd ab123cd 的請(qǐng)求進(jìn)去正則
app.get("ab*cd", (req, res) => {
    console.log("進(jìn)行了正則");
    res.send("hello 正則!");
});

// 啟動(dòng)http服務(wù)器
var server = app.listen(1937, () => {
    console.log(server.address());
});

訪問(wèn) http://127.0.0.1:1937/del_user
返回 Hello del_user
好啦!(^o^)/

解析靜態(tài)文件

Express使用了中間件 express.static中間件設(shè)置靜態(tài)文件

事實(shí)上是一個(gè)http服務(wù)器外加一個(gè)fs模塊完成封裝的

目錄結(jié)構(gòu)如下

- Express  // 站點(diǎn)文件
    - image // 圖片文件夾
        1.gif   // 將要訪問(wèn)的靜態(tài)資源
    + node_modules  // npm包所在文件夾
    app.js      // 入口文件
    package.json    // 配置文件

代碼如下

PS C:UsersmingmDesktopindexExpress> node app.js
{ address: "::", family: "IPv6", port: 1937 }
var express = require("express");
var app = express();

app.use(express.static("./image"));        // 使用中間件 express.static 設(shè)置的靜態(tài)資源文件夾為image

app.get("/", (req, res) => {
    res.send("hello world!");
});

var server = app.listen(1937, () => {
    console.log(server.address());
});

訪問(wèn) http://127.0.0.1:1937/1.gif
出現(xiàn)靜態(tài)資源,(^o^)/

GET方法
res.sendFile() http://expressjs.com/en/4x/ap...

__dirname 獲取當(dāng)前執(zhí)行文件所在目錄的完整目錄名
res.sendFlie(path [,options] [,fn]) path必須為絕對(duì)路徑,Content-Type 會(huì)根據(jù)擴(kuò)展名設(shè)置相應(yīng)的HTTP標(biāo)頭字段,需要注意的是path必須為絕對(duì)路徑

__dirname 獲取當(dāng)前執(zhí)行文件所在目錄的完整目錄名
__filename 獲取當(dāng)前執(zhí)行文件帶有完整絕對(duì)路徑的文件名
process.cwd() 獲取當(dāng)前執(zhí)行node命令時(shí)候的文件夾的目錄名
./ 文件所在目錄

req.query 此屬性是一個(gè)對(duì)象,包含路由中每個(gè)查詢字符串參數(shù)的屬性。
304請(qǐng)求 一個(gè)條件請(qǐng)求,如果有緩存的數(shù)據(jù)則進(jìn)行請(qǐng)求,否則將不會(huì)進(jìn)行請(qǐng)求




    Hello from
    


    
var express = require("express");
var app = express();

app.use(express.static("public"));    // 加載中間件

app.get("/index.html", (req, res) => {    // 調(diào)用中間件指定的靜態(tài)資源目錄 public, 然后調(diào)用回調(diào)函數(shù)
    res.sendFile( __dirname + "/" + "index.html");    // 輸出html文件的絕對(duì)路徑,采取的是拼接字符串的方式,設(shè)置http標(biāo)頭
});

app.get("/process_get", (req, res) => {
    // 輸出json格式
    var response = {
        "first_name": req.query.first_name,    // 將http報(bào)文中 查詢到的first_name的值作為屬性值
        "last_name": req.query.last_name    // 同上
    };
    console.log(response); // 輸出獲取到的json的值
    res.end(JSON.stringify(response));    // 將獲取到的值轉(zhuǎn)為JSON格式的值,然后進(jìn)行返回
});

var server = app.listen(1937, () => {
    console.log(server.address());
});

用瀏覽器查看一下json數(shù)據(jù)
請(qǐng)求為get 發(fā)送的url為 http://127.0.0.1:1937/process_get?first_name=ming&last_name=ming
查詢的字符串為
first_name=ming
last_name=ming
總共,請(qǐng)求頭為

Host: 127.0.0.1:1937
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://127.0.0.1:1937/
Cookie: hibext_instdsigdipv2=1
Connection: keep-alive
Upgrade-Insecure-Requests: 1

主機(jī)地址為127.0.0.1:1937
user-Agent為本地的系統(tǒng)的一些信息
剩下的有點(diǎn)看不懂。。╮(╯▽╰)╭
由于設(shè)置的是直接返回JSON數(shù)據(jù),所以查看一下響應(yīng)頭

{"first_name":"ming","last_name":"ming"}

此為響應(yīng)載荷
報(bào)文為

HTTP/1.1 200 OK
X-Powered-By: Express
Date: Sat, 28 Jul 2018 16:39:08 GMT
Connection: keep-alive
Content-Length: 40

采用的是http1.1協(xié)議,返回的報(bào)文為200
同理
DevTol也是如此不在進(jìn)行闡述

下面進(jìn)行POST請(qǐng)求
需要使用一個(gè)中間件 body-parser,其簡(jiǎn)單的文檔 https://www.npmjs.com/package...

需要使用一個(gè)bodyParser.urlencoded 該對(duì)象返回解析urlencoded主體。在返回的body中,將會(huì)在req對(duì)象上添加一個(gè)新的對(duì)象,該對(duì)象為body。其中的值為字符串和數(shù)組,此對(duì)象會(huì)包含鍵值對(duì)。其中的值可以為字符串和數(shù)組(此時(shí)設(shè)置的extended的值為false),其中的值允許為任何類型的需要設(shè)置extended的值為last

var express = require("express");
var app = express();
var bodyParser = require("body-parser");    // 加載Express中間件

// 使用中間件提供的bodyParser.urlencoded對(duì)來(lái)自于post的url進(jìn)行解析,只允許字符串和數(shù)字類型的結(jié)果
var urlencodeParser = bodyParser.urlencoded({ extended: false });

app.use(express.static("public"));    // 設(shè)置靜態(tài)資源目錄為public

// 進(jìn)行路由匹配
app.get("/index.html", (req, res) => {
    res.sendFile(__dirname + "/" + "index.html");    // 路徑的拼接,拼接的是當(dāng)前文件的所在目錄的絕對(duì)地址,由于要請(qǐng)求靜態(tài)資源,自動(dòng)跳到public文件夾下進(jìn)行返回
});

// post請(qǐng)求的匹配
app.post("/process_post", urlencodeParser, (req, res) => {    // 先進(jìn)行回調(diào)第一個(gè)函數(shù),將post請(qǐng)求,使用中間件進(jìn)行處理,處理完后的值進(jìn)行返回到req和res即下一個(gè)回調(diào)函數(shù),數(shù)據(jù)經(jīng)過(guò)兩次回調(diào)
    // 輸出JSON格式
    var response = {
        "first_name": req.body.first_name,    // 進(jìn)行鍵值對(duì)的保存
        "last_name": req.body.last_name    
    };
    console.log(response);    // 將接收到的數(shù)據(jù)進(jìn)行輸出
    res.end(JSON.stringify(response));    // 將鍵值對(duì)保存的對(duì)象轉(zhuǎn)化為JSON格式返回給客戶端
});

var server = app.listen(1937, () => {    // 開(kāi)啟http服務(wù)器
    console.log(server.address());
});



    Hello from
    


    

ok~
好啦。訪問(wèn) http://127.0.0.1:1937
順便打開(kāi)瀏覽器開(kāi)發(fā)者工具進(jìn)行查看返回的JSON數(shù)據(jù)

{"first_name":"ming","last_name":"ming"}

?(^?^*)完美~

文件上傳

使用post方法完成文件的上傳。

from 表單的enctype屬性當(dāng)method屬性值為post的時(shí)候,enctype提交的是from給服務(wù)器內(nèi)容的mime類型,即媒體類型,

解釋一下form表單的enctype的三個(gè)值

http的post方法,給服務(wù)器時(shí),請(qǐng)求主題類型由 Content-Type 指定,通常一個(gè)POST請(qǐng)求是通過(guò)HTML表單發(fā)送的,并返回給服務(wù)器返回修改的結(jié)果,form表單的enctype屬性是設(shè)置上傳的編碼的

application/x-www-form-urlencoded 數(shù)據(jù)被編碼成為&進(jìn)行分割的鍵值對(duì)同時(shí)以=作為分割的鍵值對(duì)。非字母和數(shù)字的字符會(huì)被進(jìn)行百分比編碼 解釋 https://developer.mozilla.org...

multipart/form-data 將會(huì)以二進(jìn)制的方式進(jìn)行上傳,上傳文件的時(shí)候必須按照這個(gè)方法進(jìn)行提交

text/plain 空格轉(zhuǎn)化為+號(hào),不對(duì)其做任何的處理進(jìn)行提交

https://developer.mozilla.org...

multer(opts) opts具有一個(gè)dest屬性,將會(huì)告訴Multer中間件上傳到服務(wù)器的位置。

multer(opts)接受鏈?zhǔn)秸{(diào)用.array(fieldname[, maxCount]) 支持一個(gè)是否為文件數(shù)組

/*
var express = require("express");
var app = express();    // 創(chuàng)建框架的類
var fs = require("fs");

var bodyParser = require("body-parser");    // 加載中間件
var multer = require("multer");
var storage = multer.diskStorage({ 
    destination: (req, file, cb) => {
        cb(null, "./image")    // 文件上傳的目錄
    },
    filename: (req, file, cb) => {
        var fileFormat = (file.originalname).split(".");    // 先將文件名采用split按照.進(jìn)行分裂
        cb(null, file.fieldname + "-" + Date.now() + "." +  fileFormat[fileFormat.length - 1]);    // 對(duì)文件重命名,加上擴(kuò)展名
    }
});    // 確定一下上傳的配置選項(xiàng)


app.use(express.static("public"));    // 添加靜態(tài)文件,用于處理靜態(tài)文件,框架自帶的
app.use(bodyParser.urlencoded({ extended: false }));    // 用于處理JSON等數(shù)據(jù)
app.use(multer({storage: storage}).array("image"));

app.get("/index.html", (req, res) => {
    res.sendFile( __dirname + "/" + "index.html" );    // 對(duì)于首頁(yè)的請(qǐng)求
});

// 該過(guò)程中間經(jīng)歷了對(duì)靜態(tài)文件的(static中間件,urlencoded對(duì)url的解析,只允許字符串和數(shù)字的結(jié)果,使用了上傳的multer的中間件,最后到回調(diào)函數(shù))
app.post("/file_upload", (req, res) => {    // 允許上傳多個(gè)文件,其中文件數(shù)組保存在req.files
    console.log(req.files[0]);    // 上傳文件的信息
     var des_file = __dirname + "/" + req.files[0].originalname;
   fs.readFile( req.files[0].path, function (err, data) {
        fs.writeFile(des_file, data, function (err) {
         if( err ){
              console.log( err );
         }else{
               response = {
                   message:"File uploaded successfully", 
                   filename:req.files[0].originalname
              };
          }
          console.log( response );
          res.end( JSON.stringify( response ) );
       });
   });
});

var server = app.listen(1937, () => {
    console.log(server.address());
});



*/

var express = require("express");
var app = express();
var fs = require("fs");
 
var bodyParser = require("body-parser");
var multer  = require("multer");
 
app.use(express.static("public"));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(multer({ dest: "/tmp/"}).array("image"));    // 設(shè)置臨時(shí)上傳的地址
 
app.get("/index.htm", function (req, res) {
   res.sendFile( __dirname + "/" + "index.htm" );
})
 
app.post("/file_upload", function (req, res) {
 
   console.log(req.files[0]);  // 上傳的文件信息
 
   var fileFormat = (req.files[0].originalname).split(".");
   var fileName = req.files[0].fieldname + "-" + Date.now() + "." + fileFormat[fileFormat.length - 1];
   var des_file = __dirname + "/image/" + fileName;    // 將要上傳的地址

    console.log(des_file);
    fs.open( "./image/" + fileName, "a", function(err, fd) {
   if (err) {
       return console.error(err);
   }
  fs.readFile( req.files[0].path, (err, data) => {
            fs.writeFile(des_file, data, (err) => {
            console.log(data);
             if( err ){
                  console.log( err );
             }else{
                   response = {
                       message:"File uploaded successfully", 
                       filename:req.files[0].originalname
                  };
              }
              console.log( response );
              res.end( JSON.stringify( response ) );
               });
           });    
});

          
});
 
var server = app.listen(8081, function () {
 
  var host = server.address().address
  var port = server.address().port
 
  console.log("應(yīng)用實(shí)例,訪問(wèn)地址為 http://%s:%s", host, port)
 
})

思路,是先將文件以追加的方式打開(kāi),然后將通過(guò)中間件上傳的文件寫入追加打開(kāi)的文件



    文件上傳表單


    

文件上傳


Cookie管理

使用中間件發(fā)送Cokie信息。
引入cookie-parser
再引入 util模塊,將對(duì)象轉(zhuǎn)換為字符串
這個(gè)很簡(jiǎn)單。過(guò)

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

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

相關(guān)文章

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

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

    zhaochunqi 評(píng)論0 收藏0
  • Node中間層實(shí)踐(二)——搭建項(xiàng)目框架

    摘要:項(xiàng)目地址腳手架使用過(guò),的同學(xué)都清楚,官方推薦的安裝方式是通過(guò)專用的來(lái)快速搭建一個(gè)由編譯打包的項(xiàng)目框架。用在層的模塊化,在中間層實(shí)現(xiàn)了模塊化。這樣,從中間層到前端都實(shí)現(xiàn)了熱加載。 版權(quán)聲明:更多文章請(qǐng)?jiān)L問(wèn)我的個(gè)人站Keyon Y,轉(zhuǎn)載請(qǐng)注明出處。 項(xiàng)目地址:https://github.com/KeyonY/NodeMiddle 腳手架? 使用過(guò)angular2,vue2的同學(xué)都清楚,官...

    DrizzleX 評(píng)論0 收藏0
  • Node圖文教程(第四章:express

    摘要:中文官網(wǎng)快速入門安裝項(xiàng)目中引入得到服務(wù)器實(shí)例綁定服務(wù)器接受請(qǐng)求事件,并且添加處理回調(diào)函數(shù)綁定服務(wù)端口,啟動(dòng)服務(wù)器運(yùn)行項(xiàng)目利用框架可以減少我們的代碼量,比起之前使用核心模塊構(gòu)建服務(wù)器代碼排版更直觀。Express框架是一款簡(jiǎn)潔而靈活的node.js web應(yīng)用框架。前面我們自己手動(dòng)創(chuàng)建服務(wù)器在Express中就是一個(gè)API的事情,這就使得我們更加注重業(yè)務(wù)的功能和開(kāi)發(fā)效率上,不必糾結(jié)過(guò)多底層的事...

    韓冰 評(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ù)器,并開(kāi)始為請(qǐng)求服務(wù)。現(xiàn)在,我們開(kāi)始創(chuàng)建第一個(gè)服務(wù)器我們將模塊,并將服務(wù)器綁定到端口來(lái)監(jiān)聽(tīng)。必須用如下方式啟動(dòng)服務(wù)器總結(jié)本章學(xué)習(xí)了如何從頭開(kāi)始創(chuàng)建第一個(gè)服務(wù)器。 本文轉(zhuǎn)載自:眾成翻譯譯者:網(wǎng)絡(luò)埋伏紀(jì)事鏈接:http://www.zcfy.cc/article/1750原文:https://blog.risings...

    Coly 評(píng)論0 收藏0
  • 【實(shí)戰(zhàn)】用 express+MongoDB 搭建一個(gè)完整的前端項(xiàng)目

    摘要:前言要做一個(gè)全沾的工程師,對(duì)于后端和數(shù)據(jù)庫(kù)來(lái)說(shuō),即使不認(rèn)識(shí)也要見(jiàn)個(gè)面的。基本了解的概念就好,主要是安裝上數(shù)據(jù)庫(kù),并進(jìn)行簡(jiǎn)單的增刪操作。 前言:要做一個(gè)全沾的工程師,對(duì)于后端和數(shù)據(jù)庫(kù)來(lái)說(shuō),即使不認(rèn)識(shí)也要見(jiàn)個(gè)面的。本文給的例子很簡(jiǎn)單,也貼出來(lái)源碼,只要一步步下來(lái),就可以跑起來(lái)啦~~~ 思考一個(gè)需求:做一個(gè)登錄頁(yè)面,自己搭建服務(wù)和數(shù)據(jù)庫(kù),將用戶輸入的登錄信息保存到數(shù)據(jù)庫(kù)如何完成呢:首先選擇...

    Steve_Wang_ 評(píng)論0 收藏0
  • Koa v2.x 中文文檔 Koa 對(duì)比 Express

    摘要:使用承諾和異步功能來(lái)擺脫回調(diào)地獄的應(yīng)用程序,并簡(jiǎn)化錯(cuò)誤處理。它暴露了自己的和對(duì)象,而不是的和對(duì)象。因此,可被視為的模塊的抽象,其中是的應(yīng)用程序框架。這使得中間件對(duì)于整個(gè)堆棧而言不僅僅是最終應(yīng)用程序代碼,而且更易于書寫,并更不容易出錯(cuò)。 Koa 與 Express 此系列文章的應(yīng)用示例已發(fā)布于 GitHub: koa-docs-Zh-CN. 可以 Fork 幫助改進(jìn)或 Star 關(guān)注更新...

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

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

0條評(píng)論

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