亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

快速學習nodejs系列:十三、nodejs實現restful api、cookie、session

asce1885 / 666人閱讀

摘要:在前面的節(jié)課程里面,我們已經基本學習完了的知識,達到基礎入門的要求。英語的直譯就是表現層狀態(tài)轉移。的特點不加密用戶可刪除可被修改依賴于用戶禁用或清除時,讀取出錯。下節(jié),會開始學習框架。

在前面的12節(jié)課程里面,我們已經基本學習完了nodejs的知識,達到基礎入門的要求。
那為什么會在這節(jié)說下使用nodejs來實現一些功能,而不繼續(xù)往下講呢?原因有2:
1.前面講地都是理論知識,碼代碼比較少,所以在這節(jié)要總體地運用下前面學習的知識,寫點小demo;
2.這節(jié)寫的demo都是通過原生的nodejs去寫,沒有涉及到任何的框架。這是我覺得,通過原生的方式去寫,大家在后面學習框架的時候,在能體會到框架的好處,通過與原生的對比,大家也能更好地理解、掌握框架。

1.restful api
REST -- REpresentational State Transfer,英語的直譯就是“表現層狀態(tài)轉移”??吹竭@個,有沒覺得完成不知道是啥。
其實restful api 可以理解為:通過URL定位資源找到我們的資源,用HTTP的方法(GET,POST,PUT,DELETE)來描述操作。
比如:我們在開發(fā)過程中會遇到用戶管理的問題,假設我們對用戶管理的api為:http://www.xxx.com/user

restful的風格如下:
用戶注冊(新增用戶信息)----使用post方式,對http://www.xxx.com/user這個ur...
用戶信息(查看用戶信息)----使用get方式,對http://www.xxx.com/user?user_...
用戶修改(修改用戶信息)----使用put方式,對http://www.xxx.com/user這個ur...
用戶刪除(刪除用戶信息)----使用delete方式,對http://www.xxx.com/user這個ur...
我們對同一個url地址,通過不同的http方式達到不同操作要求;我覺得restful相對于其他形式實現的api(通過定義不同的url名子、同一url帶上不同的參數等)的優(yōu)點是:url定義地很少了、前后端對接更清晰了(特別是在前后分離的情況之下)。當然了,你也可以根據你們團隊習慣去開發(fā),不一定要使用restful,只是建議!

現在我們就用nodejs來實現這個api:

//引入http模塊
var http = require("http");
//引入url模塊
var url = require("url");
//desc 實現一個http服務器,server、req、res分別是Server、IncomingMessage、ServerResponse類的實例
var server = http.createServer((req,res)=>{

//路由設計
//把url字符串變成url對象
let urlObj = url.parse(req.url,true);
if(urlObj.pathname == "/user"){
    //restful實現的關鍵,判斷http的請求方式
    switch(req.method){
        //get
        case "GET":
        //設置http狀態(tài)碼和Content-Type頭
        res.writeHead(200,{"Content-Type":"application/json"});
        //end()只能調用一次,且內容是字符串,其中${urlObj.query.user_id}是es6語法
        res.end(`{"error":0,"errMsg":"收到的user_id=${urlObj.query.user_id}"}`);
        break;

        //post
        case "POST":
        //nodejs怎么去獲取前端post過來的請求體呢?
        //1.通過事件(events)實例,nodejs很多實例都是events實例(如IncomingMessage實例就是),我們現在用這種方法
        //2.借助body-parser等中間件,學習框架用這種方法
        let postData = "";
        req.setEncoding("utf8");//設置編碼
        req.on("data",(chunk)=>{//監(jiān)聽data事件,不斷讀取數據
            postData += chunk;
        });
        req.on("end",()=>{//監(jiān)聽end事件,讀取完觸發(fā)
            //原樣返回給前端
            res.writeHead(200,{"Content-Type":"application/json"});
            res.end(postData);
        });
        break;
    }
}

});
//監(jiān)聽3000端口
server.listen(3000);

postman請求結果:

cookie/session
cookie:
第一次訪問一個服務器,不會帶上cookie,必須是服務器得到這個請求,在下行的響應報文頭中,會帶上cookie的信息,以后每次訪問該服務器時都會帶上該cookie。
cookie的特點:1.cookie不加密、2.用戶可刪除、3.cookie可被修改
session:
session依賴于cookie,用戶禁用或清除cookie時,session讀取出錯。與cookie不同的是:session的數據是存在服務器中,生成session的時候同時會生成session_id存在cookie中,在獲取session的時候利用該session_id讀取。

設置cookie

第一次訪問:


第一次訪問時,響應報文頭設置了cookie:Set-Cookie:name=nodejs;而讀取是undefined;
再次訪問:

請求報文頭,會帶上cookie,而這次也讀取到了cookie值

小爬蟲
我們就爬思否的首頁的文章數據,思否別打我?。?!都是為了學習。
在這個例子中,爬蟲其實主要是要分析html的結構,根據結構解析、提取出想要的數據。當然了,有些網站你還要繞過它的登錄驗證等,不會很用容易就可以爬取到。
通過分析思否的列表的結構如下:

通過對div結構的分析:
每個list都在news-item這個類中(id在data-id屬性中),主要的內容在news__item-info這個類中,標題在news__item-title類中,文章簡介在article-excerpt類中,作者在author類中。

var http = require("http");
var https = require("https");
var cheerio = require("cheerio");
//實現一個http服務器
var server = http.createServer((req,res)=>{

//https客戶端,讀取https://segmentfault.com/數據,這里不能用http去讀取
https.get("https://segmentfault.com/",(result,err)=>{
    //result 可讀流
    if(err){
        //有錯誤直接返回錯誤提示
        return ;
    }
    //獲取html的頁面結構數據
    result.setEncoding("utf8");
    let rawData = "";
    //定義個數組來存放解析后的數據
    let dataArr = [];
    result.on("data",(chunk)=>{ rawData += chunk;});
    result.on("end",()=>{
        //讀取完后對html的dom結構進行解析,這里要用到cheer模塊(類似于jquery)
        let $ = cheerio.load(rawData);
        //用類似jquery的語法讀取數據
        $(".news-item").each((i,item)=>{
            let itemObj = $(".news-item").eq(i);
            let id = itemObj.attr("data-id");
            let title = itemObj.children(".news__item-info").children("a").children(".mb5").children().text();
            let remark = itemObj.children(".news__item-info").children("a").children(".article-excerpt").text();
            let author = itemObj.children(".news__item-info").children(".news__item-meta").children().eq(2).children().eq(0).text();
            dataArr.push({id,title,remark,author});//es6的對象簡化寫法
        });
        console.log(dataArr);
        //返回
        res.end(JSON.stringify(dataArr));
    });
});

});
//監(jiān)聽3000端口
server.listen(3000);

postman的結果:

上圖返回的就是想要的爬蟲數據,如果這時你也要做內容服務的應用,你就相當于有數據源了,可以展示在你的應用中了。

注意:上面的這些小demo,我們使用了一些第3方模塊:cookies、cheerio,這些你是要到npmjs.com下載才能使用,并不是nodejs的官方模塊。

下節(jié),會開始學習express框架。

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

轉載請注明本文地址:http://www.ezyhdfw.cn/yun/98731.html

相關文章

  • nodejs-local-api

    摘要:一簡述近期,在學習期間,由于需要造數據,想到弄數據庫麻煩,就直接用文件代替了,想到不錯,主要還是,所以就試著寫了寫,嘿嘿,能用。 一、簡述 近期,在學習vue期間,由于需要造數據,想到弄數據庫麻煩,就直接用json文件代替了,想到nodejs不錯,主要還是js,所以就試著寫了寫,嘿嘿,能用。 二、實現 實現使用的技術:Nodejs + Express 4.x + ejs + boo...

    Karrdy 評論0 收藏0
  • 前端面試題大集合:來自真實大廠的532道面試題(只有題,沒有答案)

    答案自己谷歌或百度找。 一、來源背景 面試題是來自微博@??途W發(fā)布的真實大廠前端面經題目,我一直在收集題目長期一個一個的記錄下來的,可能會有重復,但基本前端的面試大綱和需要掌握的知識都在其中了,面試題僅做學習參考,學習者閱后也要用心鉆研其中的原理,重要知識需要系統(tǒng)學習、透徹學習,形成自己的知識鏈。 二、532道前端真實大廠面試題 express和koa的對比,兩者中間件的原理,koa捕獲異常多種情...

    Kerr1Gan 評論0 收藏0
  • 前端面試題大集合:來自真實大廠的532道面試題(只有題,沒有答案)

    答案自己谷歌或百度找。 一、來源背景 面試題是來自微博@牛客網發(fā)布的真實大廠前端面經題目,我一直在收集題目長期一個一個的記錄下來的,可能會有重復,但基本前端的面試大綱和需要掌握的知識都在其中了,面試題僅做學習參考,學習者閱后也要用心鉆研其中的原理,重要知識需要系統(tǒng)學習、透徹學習,形成自己的知識鏈。 二、532道前端真實大廠面試題 express和koa的對比,兩者中間件的原理,koa捕獲異常多種情...

    lushan 評論0 收藏0
  • 前端面試題大集合:來自真實大廠的532道面試題(只有題,沒有答案)

    答案自己谷歌或百度找。 一、來源背景 面試題是來自微博@??途W發(fā)布的真實大廠前端面經題目,我一直在收集題目長期一個一個的記錄下來的,可能會有重復,但基本前端的面試大綱和需要掌握的知識都在其中了,面試題僅做學習參考,學習者閱后也要用心鉆研其中的原理,重要知識需要系統(tǒng)學習、透徹學習,形成自己的知識鏈。 二、532道前端真實大廠面試題 express和koa的對比,兩者中間件的原理,koa捕獲異常多種情...

    joyvw 評論0 收藏0
  • NodeJs+Express+Mysql + Vuejs 項目實戰(zhàn) - 大綱

    摘要:多一個技能多一條出路,祝你在自學道路上越走越好,掌握自己的核心技能,不只是優(yōu)秀,還要成為不可替代的人 NodeJs+Express+Mysql + Vuejs 項目實戰(zhàn) 最近準備寫一系列文章,全面講述如何基于NodeJs + Express + Mysql + Vuejs 從零開發(fā)前后端完全分離項目; 文筆及技術可能在某些方面欠佳,請您指正,共同學習進步 前端:Vuejs全家桶 后端:...

    noONE 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<