整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          用Node.js進行后端開發的特點與優勢

          果您熟悉編程,那么您肯定聽說過使用Node.js的后端開發方式。從根本上說,Node.js是一種框架,是一種在瀏覽器后臺(或外部)運行JavaScript(JS)代碼的運行時(runtime)環境。而作為一種編程語言,由JavaScript編寫的統一代碼庫,不但加快了開發進程,而且實現了過往我們無法完成的Web開發任務。

          其實,Node.js后端開發并非什么新鮮事物,它既適用于企業級的應用程序,又適用于B2C類型的應用。目前,Node.js后端開發已在軟件開發人員中極為流行。您可以在Netflix或PayPal等許多產品中,找到它的身影。而為了跟上技術的發展,您有必要知道各種有關Node.js的基礎知識、相關特點、及其優勢。

          Node.js的競爭對手

          在Web項目的開發過程中,應用程序的后端開發質量,往往對于業務的正常運行,起到了至關重要的作用。在我們開始詳細討論Node.js之前,先來一起看看Node.js的主要后端競爭語言和框架。

          PHP

          PHP往往被程序員們廣泛地用于大、中型項目的后端開發。由于其體系結構是事件驅動的,因此它不適合于各種實時的連接。不過,憑借著其強大的支持社區,它能夠在眾多編程語言中脫穎而出。

          Python

          由于Python非常容易被上手,因此它可以被用來快速、高效地創建大、中型應用項目。不過,當Python受限于服務性能時,開發人員會選用PyPy來解決和實現。

          Ruby

          Ruby適用于一些中、小型項目。開發人員往往能夠受益于它所提供的全面文檔和龐大的社區。近年來,雖然Ruby和RoR(Ruby on Rails)框架廣為流行,但是其更新并不頻繁。

          Java

          Java屬于老牌多用途的編程語言。由于它是開發人員的入門級語言,因此大家對其有著深入地了解和運用。Java通常適用于那些需要復雜計算、以及繁雜數據處理的大型企業項目中。

          .Net

          .Net是一個功能強大的Microsoft框架,適用于中、小型項目中的多種后端和前端開發場景,包括Web服務、網站與桌面開發等領域。.Net不但免費,并且可以運行在不同的平臺上。

          Node.js的概念與特征

          作為一個運行時環境,Node.js允許程序員為應用程序編寫、編輯并運行JS代碼。簡單說來,它是一個用于在JavaScript中構建應用的平臺。其主要特征包括:

        1. 一種服務器端框架
        2. 一種免費的許可證技術
        3. 適用于不同的平臺
        4. Node.js的使用領域

          許多人認為Node.js僅可用于Web開發。但實際上,它的使用領域十分豐富。下面是其中的一些典型應用場景:

        5. 包管理。它可以被用于打造安裝、配置和刪除程序的工具集合。目前,許多易用的軟件包管理器(包括NPM、Yarn、Bower等),都是由Node.js構建的。
        6. I/O綁定應用。Node.js可以被用于創建I/O子系統,以自動提高I/O綁定程序的性能。
        7. 得益于Node.js的強大生態系統、以及一些高質量的軟件包,我們可以使用Node.js來輕松構建命令行工具。
        8. 構建各種編譯器,GUI構建器,調試器等開發工具。Node.js包含了各種組件,其中包括用于模塊管理的Web包、用于任務自動化的gulp或grunt、用于調試的jslint或eslint等。
        9. 可見,能用到Node.js開發的領域遠不止Web后端開發。我們甚至可以通過使用諸如Electron的Node.js框架,來創建桌面端應用程序。

          Node.js的框架集

          盡管Node.js非常流行,但是它仍然會有一些難以執行的任務。為此,其社區開發出了許多既能簡化工作,又備受歡迎的框架集,例如:

        10. Nest.js- 這種高級Node.js框架可用于構建高效、且可擴展的后端軟件。Nest.js可以通過廣泛的軟件庫,來實現TypeScript、MVP、OOP、FP和FRP,因此它比較適合那些企業級的項目。
        11. Express.j - 憑借著快速、簡約的設計,以及強大的HTTP helpers集合等功能,它在Node.js的框架集中名列前茅。Express.js非常適合構建Web、移動應用、以及API。
        12. Socket.io - 由于帶有易用的API,專注于雙向實時流,并支持自動化重新連接、多路復用、以及二進制等方面,因此它可以被輕松地使用在不同的設備上。
        13. Meteor.js - 由于包含了牢固的前端框架,并提供了動態導入、實時功能、前端與后端集成、以及免受隱藏API的影響,它能夠讓Node.js來創建高質量的軟件。
        14. Koa.js - Koa.js不但有更快的異步功能,而且能夠簡化錯誤的處理過程,并提高應用程序的性能。
        15. Loopback.io - 由于它提供了簡化各項工作過程的功能,開發人員可以在幾分鐘之內開發出各種API。它不但支持按需查詢與存儲服務,而且能夠與各種REST服務、以及許多常見的數據庫相兼容。
        16. Feathers.i - 作為基于Express.js的Node.js框架,它能夠與許多前端框架相兼容,并支持各種可選的插件。用戶可以用它來輕松地編寫出各種實時的Web應用和REST API。
        17. 人們通過選擇上述不同的Node.js框架,來滿足不同項目的特定需求。

          Node.js的后端開發優勢

          JS雖然早在多年前就已經在Web工程領域,獲得了廣泛的普及,但是如今借助著Node.js后端框架,開發人員不但可以輕松地實現過去基于事件的環境,所無法實現的功能,而且能夠使用相同的代碼,來構建服務器端和客戶端應用。此外,由于HTTP的請求和響應都屬于大文件流,而Node.js恰好適合實時處理大量信息,因此它可以利用GraphQL提供的儀表板,將收集的數據可視化。

          同時,Node.js的后端開發優勢還包括:開發速度快,能夠將數據保存在本地的JSON中,擁有龐大的開發人員支持社區,可以在最高級別上執行數據流的傳輸,提供了出色的托管選項,而且適合于各種軟件平臺的開發。

          如何使用Node.js增強應用程序的性能?

          說到Node.js的優勢,人們往往首先想到的是降低開發的成本,以及提高開發人員的生產率。實際上,更重要的是,Node.js可以通過如下方面,為開發項目極大地提高應用程序的性能:

        18. Node.js是無阻塞的,可以執行多項任務,并提供異步功能。
        19. 由于進程是在某個線程中,而不是在隊列中處理,因此它提高了服務器的活動性。
        20. Node.js采用的是JavaScript最快的V8 Chrome引擎。
        21. Node.js讓應用程序更具有可擴展性。
        22. Node.JS在業界的流行程度

          根據2020年的一份調查顯示,Node.js憑借著其綜合優勢,已榮登各個開發公司項目開發框架的榜首。通過使用Node.js來進行后端開發,許多IT領域的巨頭都在應用程序上獲得了出色的性能和廣泛的采用。其中典型的明星公司包括:Microsoft、Uber、PayPal、Amazon、BMW、Netflix、eBay、以及Intel等。他們既會將Node.js運用于小型項目,又能夠成功地構建企業級的大型應用。

          Node.js的后端開發人員

          根據Stackoverflow的相關統計,Node.js的后端開發人員在軟件市場上炙手可熱。就學習曲線而言,Node.js不僅易于從零開始,也方便在具有一定的其他編程知識的基礎上切入學習。當然,這會在客觀上造成魚龍混雜的狀況。因此,如果您的團隊需要雇傭Node.js后端開發人員時,應仔細考量候選人的基本技能,以及參與過哪些項目。下面是可參考的部分要點:

        23. 2-3年開發經驗
        24. 對Node.js的各類框架具有深入理解
        25. 至少具備基本的前端知識
        26. 具備良好的測試和錯誤處理能力
        27. 熟悉REST API
        28. 熟練掌握數據庫管理的相關知識
        29. 能夠提供良好的Node.js安全性(包括如何啟用安全授權,使用加密等)
        30. 說到雇傭人員,我們來看兩個有關團隊組成的相關概念,即:職能型和跨職能團隊。

          例如,您雇用了9個人來從事某個項目,其中有3位系統分析師、3位開發人員和3位測試人員,這就組成了一個職能型團隊。而在跨職能團隊里,由于人手有限,所有人都必須具備項目所需的各個領域的開發經驗(包括編碼、托管、以及維護等)。而相對于職能型團隊,跨職能團隊的優勢主要體現在:

        31. 更全面的見解
        32. 能夠提高生產力
        33. 具備開發溝通的技巧
        34. 具有團隊精神
        35. 更少會出現單個職能崗位的空缺
        36. 綜上所述,正是由于Node.js采用了廣為大家所熟知的JS技術,因此前端與后端人員在開發過程中,彼此的邊界已變得非常清晰。無論是團隊成員,還是項目本身,都能夠充分受益于Node.js所帶來的各項優勢。

          文章來源:https://developer.51cto.com/art/202101/639888.htm#topx

          .Express中間件原理詳解

          1.中間件本質:就是一個函數;

          2.中間件功能:

          (1)執行任何代碼;(2)修改請求和響應對象;(3)調用堆棧的下一個中間件;

          通俗的理解,就像一個管道,新的管道可以對流過的請求,數據做處理;

          3.中間件分類:

          五類,原理相同,用法不同而已;

          (1)應用級中間件;(2)路由級;(3)錯誤處理類;(4)內置(5)第三方;

          4.原理:

          (1)源碼中與中間件相關的三個文件

          (2)application.js中的use方法,把我們app.use注冊的中間件和路由方法交給了Router類來處理。

          (3)子中間件,同時掛載一系列中間件函數,就會在一個掛載點上創建子中間件棧;


          二.Express和KOA的對比

          1.相同點:基于node的服務端開發框架,處理的重點三個:

          HTTP Request和HTTPRespone兩個對象的封裝和處理;

          應用聲明周期的維護;

          視圖的處理;

          2.總體的區別:

          (1)express基于connect中間件框架,自身封裝了很多功能,比如路由、視圖;

          KOA基于co中間件框架,自身集成的功能很少,需要自行require;

          (2)回調函數的特性:

          KOA1是基于ES6的generator的,解決了回調黑洞問題;

          KOA2把generatoryield換成語義化更好async和await了;

          3.HTTP Request對象

          (1)express使用req.query 即可拿到get請求的url格式化對象;

          post請求需要body-parser中間件;

          (2)koa使用this.request.query拿到get請求的url格式化對象;

          post請求需要用co-body中間件;

          4.路由Route

          (1)express中使用,all(所有),get,post

          注意app.get,一個參數表示獲取公共的配置項,兩個參數時才作為路由處理。

          (2)KOA中要引入route中間件使用get、post方法,再把route掛載到app.use上;

          5.HTTP Respone

          express使用res對象;KOA綁定到ctx.body上,輸出json需要引人中間件;


          三.基本API: 4句和5句

          用nodejs,express,koa各實現一次爬蟲實戰。

          三個項目代碼放到了github:https://github.com/liangchaofei/node_crawler上,可以直接下載運行。

          node爬蟲

          • 安裝爬蟲利器superagent和cheerio 本文不作介紹。
           npm i superagent cheerio --save
          
          • 確定爬蟲頁面:http://bbs.tianya.cn/list-45-1.shtml
          • 分析頁面dom結構

          • 看出每個標題都是在class為mt5下的tr下面,所以遍歷.mt5下的tr
           
          • 把數據當到data目錄下

          express爬蟲

          • 安裝包
           npm install express superagent cheerio superagent-charset --save
          
          • 確定爬蟲頁面:https://www.qqtn.com/
          • 分析頁面結構

          • 看出每個標題都是在div.g-main-bg ul.g-gxlist-imgbox li a下面,進行遍歷
           $('div.g-main-bg ul.g-gxlist-imgbox li a').each(function(idx, element) {
           var $element = $(element);
           var $subElement = $element.find('img');
           var thumbImgSrc = $subElement.attr('src');
           items.push({
           title: $(element).attr('title'),
           href: $element.attr('href'),
           thumbSrc: thumbImgSrc
           });
           });
          
          • 把數據items存到img.json中
           fs.access(path.join(__dirname, '/img.json'), fs.constants.F_OK, err => {
           if (err) { // 文件不存在
           fs.writeFile(path.join(__dirname,'/img.json'), JSON.stringify([
           {
           route,
           items
           }
           ]), err => {
           if(err) {
           console.log(err)
           return false
           }
           console.log('保存成功')
           })
           } else {
           fs.readFile(path.join(__dirname, '/img.json'), (err, data) => {
           if (err) {
           console.log(err)
           return false
           }
           data = JSON.parse(data.toString())
           let exist = data.some((page, index) => {
           return page.route == route
           })
           if (!exist) {
           fs.writeFile(path.join(__dirname, 'img.json'), JSON.stringify([
           ...data,
           {
           route,
           items
           },
           ]), err => {
           if (err) {
           console.log(err)
           return false
           }
           })
           }
           })
           }
           res.json({ code: 200, msg: "", data: items });
           })
          

          koa爬蟲

          • 安裝
           npm i koa koa-router cheerio superagent --save
          
          • 確定爬蟲頁面:https://www.freebuf.com/
          • 分析頁面結構

          • 遍歷div .news-list .news-info dl dt a
           $('div .news-list .news-info dl dt a').each((index, ele) => {
           data.push({
           title: $(ele).attr('title'),
           href: $(ele).attr('href')
           })
           })
          
          • 把數據添加到data.json中
           fs.access(path.join(__dirname, 'data.json'), err => {
           if (err) {
           fs.writeFile(path.join(__dirname, 'data.json'), JSON.stringify([
           {
           data
           }
           ]), err => {
           if (err) {
           return;
           }
           })
           } else {
           fs.readFile(path.join(__dirname, 'data.json'), (err, res) => {
           data = res.toString()
           if (err) {
           return;
           }
           })
           }
           })
          

          以上把node,express,koa都簡單的實現了爬蟲,面對復雜的頁面,還需要不斷的學習其他技術。

          上面三個項目代碼放到了github上,可以直接下載運行。

          如果對你有幫助,歡迎star。

          微信公眾號:


          主站蜘蛛池模板: 国产一区二区影院| 高清一区二区三区| 一区二区和激情视频| 亚洲国产精品无码第一区二区三区 | 中文字幕一区二区免费| 麻豆aⅴ精品无码一区二区| 国产精品无码亚洲一区二区三区| 久久精品人妻一区二区三区 | 手机福利视频一区二区| 久久久99精品一区二区| 韩国精品福利一区二区三区| 无码一区二区三区免费| 福利一区二区在线| 精品久久久中文字幕一区 | 国产精品视频一区二区噜噜| 一区二区三区影院| 精品少妇一区二区三区在线| 日韩精品一区二区三区老鸦窝| 精品国产鲁一鲁一区二区| 国产激情无码一区二区app| 久久精品国产一区二区电影| 无码日韩人妻AV一区免费l| 精品无码国产一区二区三区麻豆| 韩国美女vip福利一区| 亚洲视频一区在线观看| 精品无码一区二区三区爱欲九九 | 亚洲丰满熟女一区二区哦| 3d动漫精品啪啪一区二区免费| 亚洲日本一区二区| 国产大秀视频在线一区二区| 亚洲精品国产suv一区88| 一本一道波多野结衣一区| 日韩欧美一区二区三区免费观看| 亚洲色偷偷偷网站色偷一区| 3d动漫精品一区视频在线观看| 亚洲Av高清一区二区三区| 精品乱码一区二区三区四区| 伊人色综合视频一区二区三区| 无码人妻精品一区二区蜜桃 | 免费一本色道久久一区| 无码aⅴ精品一区二区三区|