真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何成為一個(gè)更好的Node.js開發(fā)者

這篇文章給大家介紹如何成為一個(gè)更好的Node.js開發(fā)者,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

為甘南等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及甘南網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、甘南網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

小編主要討論一些進(jìn)行Node.js開發(fā)的實(shí)踐和建議,這些建議不僅僅適合開發(fā)者, 還適合那些管理與維護(hù)Node.js基礎(chǔ)架構(gòu)的工作人員。遵循本文提供的這些建議, 能夠讓你更好的進(jìn)行日常的開發(fā)工作。

回調(diào)約定, 同時(shí)支持Promise

在去年,我們可能會(huì)推薦你為你的模塊暴露錯(cuò)誤優(yōu)先的回調(diào)接口。但是隨著生成器函數(shù)的正式標(biāo)準(zhǔn)化,并且異步函數(shù)也即將到來, 因此我們現(xiàn)在建議你在編寫模塊的接口時(shí)應(yīng)該暴露支持Promise的的錯(cuò)誤優(yōu)先的回調(diào)函數(shù)。

為什么需要這樣?首先回調(diào)接口是為了提供向后兼容性,為了能夠在未來能夠獲得更好的兼容性,需要同時(shí)提供Promise支持。

你可以參考下面的例子來進(jìn)一步的理解具體應(yīng)該如何進(jìn)行編程。在這個(gè)例子中readPackage函數(shù)讀取了package.json文件, 并同時(shí)通過Promise和回調(diào)接口返回了它的內(nèi)容。

const fs = require('fs');  function readPackage (callback) {   // as of now we do not have default values in Node.js   callback = callback || function () {}   return new Promise((resolve, reject) => {     fs.readFile('./package.json', (err, data) => {       if (err) {         reject(err);         return callback(err);       }       resolve(data);       return callback(null, data);     })   })  }  module.exports.readPackage = readPackage;

異步模式

在Node.js中,很長(zhǎng)一段時(shí)間你只有兩種方法來管理異步流:回調(diào)或者流(Stream)。對(duì)于回調(diào)函數(shù)而言, 你可以使用類似于async這類庫(kù), 對(duì)于流而言,有through、bl、highland等庫(kù)可以選擇。

但是隨著Promise、生成器、異步函數(shù)等被逐漸引入進(jìn)標(biāo)準(zhǔn)的ECMAScript,JS中的流程控制也得到了極大的改善。

錯(cuò)誤處理

錯(cuò)誤處理在應(yīng)用開發(fā)過程中起著至關(guān)重要的作用:確定應(yīng)用崩潰的時(shí)間,或者僅僅是打印錯(cuò)誤信息,確保應(yīng)用繼續(xù)運(yùn)行都是有一定難度的。

為了能夠更簡(jiǎn)單的說明這個(gè)問題,我們決定將其分為兩種:程序員錯(cuò)誤(programmer errors)和運(yùn)算錯(cuò)誤(operational errors)。

程序員錯(cuò)誤就是我們所說的bug,由于你不知道程序運(yùn)行的確切狀態(tài)因此當(dāng)出現(xiàn)錯(cuò)誤時(shí)你***立刻停止應(yīng)用的運(yùn)行(crash the process)。

另一方面,運(yùn)算錯(cuò)誤是由于系統(tǒng)或者遠(yuǎn)程服務(wù)本身所導(dǎo)致的問題。例如:請(qǐng)求超時(shí)和內(nèi)存不足等?;阱e(cuò)誤發(fā)生的特點(diǎn),你可以對(duì)癥下藥, 然后重試,例如文件丟失,你可以去創(chuàng)建相應(yīng)的文件。

在回調(diào)中進(jìn)行錯(cuò)誤處理

如果一個(gè)錯(cuò)誤發(fā)生在異步操作的過程中,錯(cuò)誤對(duì)象應(yīng)該作為異步函數(shù)的第一個(gè)參數(shù)進(jìn)行傳遞。你必須始終要檢查該錯(cuò)誤對(duì)象并進(jìn)行錯(cuò)誤處理。

在前面的有關(guān)回調(diào)約定的例子里面已經(jīng)展示了如何在回調(diào)函數(shù)中進(jìn)行錯(cuò)誤的優(yōu)先處理。

在Promise中進(jìn)行錯(cuò)誤處理

如果是下面的代碼片段會(huì)發(fā)生什么情況?

Promise.resolve(() => 'John')   .then(() => {     throw new Error('ops');   })   .catch((ex) => {     console.log(ex);   })   .then(() => {     throw new Error('ups');     console.log(Doe');   })

在第3行會(huì)拋出一個(gè)異常。

  1. catch會(huì)處理它,并且在stdout中打印出:[Error: ops]

  2. 執(zhí)行繼續(xù),并且在第9行會(huì)拋出一個(gè)新的錯(cuò)誤

  3. 沒有了

的確沒有什么了 ; 第一個(gè)被拋出的錯(cuò)誤將會(huì)是靜默的。你需要注意,你應(yīng)該始終以一個(gè)catch語(yǔ)句作為promise鏈的第一環(huán)。 這會(huì)為你解決很多頭疼的問題。像下面這樣:

Promise.resolve(() => 'John')   .then(() => {     throw new Error('ops');   })   .catch((ex) => {     console.log(ex);   })   .then(() => {     throw new Error('ups');     console.log(Doe');   })   .catch((ex) => {     console.log(ex);   });

現(xiàn)在會(huì)輸出如下內(nèi)容:

[Error: ops] [Error: ops]

使用JavaScript標(biāo)準(zhǔn)風(fēng)格

在過去幾年中,我們會(huì)使用JSHint、JSCS、ESLint等非常有用的代碼質(zhì)量工具來盡可能的自動(dòng)化檢查我們的代碼。

最近,當(dāng)談到代碼風(fēng)格的時(shí)候,我們使用feross的JavaScript標(biāo)準(zhǔn)風(fēng)格。

原因是它非常的簡(jiǎn)單:無需任何配置文件,只需要將其放到項(xiàng)目中。主要包括如下一些規(guī)則:

  • 使用2個(gè)空格作為縮進(jìn)

  • 字符串使用單引號(hào) – 除了為了避免轉(zhuǎn)義

  • 不要包括沒有被使用的變量

  • 沒有分號(hào)

  • 永遠(yuǎn)不要以 ( 或者 [ 作為一行的開始

  • 關(guān)鍵字后加空格 if (condition) { ... }

  • 函數(shù)名后加空格 function name (args) { ... }

  • 始終使用===代替==,但是可以使用obj == null來檢查null || undefined。

  • 始終要處理Node.js的err函數(shù)參數(shù)

  • 始終要為瀏覽器全局變量增加window前綴,除了document和navigator

  • 盡可能避免使用類似于open、length、evet、name等走位瀏覽器全局變量。

當(dāng)然,如果你的 編輯器只支持ESLint的話,這里有一個(gè)ESLint的規(guī)則庫(kù)用于使用標(biāo)準(zhǔn)風(fēng)格,即eslint-plugin-standard。 安裝了這個(gè)插件后,你的.eslintrc文件可以是下面這樣的:

{     "plugins": [         "standard"     ], }

12-Factor應(yīng)用(The Twelve-Factor Application)

如今,軟件通常會(huì)作為一種服務(wù)來交付,它們被稱為網(wǎng)絡(luò)應(yīng)用程序,或軟件即服務(wù)(SaaS)。 12-Factor應(yīng)用宣言描述了進(jìn)行Web應(yīng)用開發(fā)的***實(shí)踐:

  1. 基準(zhǔn)代碼:一份基準(zhǔn)代碼,多份部署

  2. 依賴:顯示聲明依賴

  3. 配置:在環(huán)境中存儲(chǔ)配置

  4. 后端服務(wù):把后端服務(wù)當(dāng)作附加資源

  5. 構(gòu)建、發(fā)布、運(yùn)行:嚴(yán)格分離構(gòu)建和運(yùn)行

  6. 進(jìn)程:以一個(gè)或多個(gè)無狀態(tài)進(jìn)程運(yùn)行應(yīng)用

  7. 端口綁定:通過端口綁定提供服務(wù)

  8. 并發(fā):通過進(jìn)程模型進(jìn)行擴(kuò)展

  9. 易處理:快速啟動(dòng)和優(yōu)雅終止可***化健壯性

  10. 開發(fā)環(huán)境與線上環(huán)境等價(jià):盡可能的保持開發(fā)、預(yù)發(fā)布、線上環(huán)境相同

  11. 日志:把日志當(dāng)作事件流

  12. 管理進(jìn)程:后端管理任務(wù)當(dāng)作一次性進(jìn)程運(yùn)行

這套理論適用于任意語(yǔ)言和后端服務(wù)(數(shù)據(jù)庫(kù)、消息隊(duì)列、緩存等)開發(fā)的應(yīng)用程序。

開始新的項(xiàng)目

始終通過npm init命令來開始一個(gè)新項(xiàng)目。這可以為你的項(xiàng)目創(chuàng)建一個(gè)初始的package.json。

如果你想跳過初始的提問并直接使用默認(rèn)的配置,只需要運(yùn)行npm init --yes即可。

監(jiān)控你的應(yīng)用

當(dāng)發(fā)生某個(gè)故障或是故障即將發(fā)生時(shí),及時(shí)的通知你,能夠?yàn)槟阃旎負(fù)p失。

為了進(jìn)行應(yīng)用的監(jiān)控,你可以使用類似的SaaS產(chǎn)品或是開源軟件。在開源軟件方面,主要包括:Zabbix, Collected, ElasticSearch和Logstash。

如果你不想要自己進(jìn)行部署,可以考慮使用線上的服務(wù),你可以嘗試使用Trace, 它是我們公司開發(fā)的Node.js和微服務(wù)監(jiān)控解決方法。

如何成為一個(gè)更好的Node.js開發(fā)者

語(yǔ)義版本控制是一種為了兼容性空啊率的使用三段式版本號(hào)的正式約定,即:major.minor.patch,分別為主版本,次版本,補(bǔ)丁。

如果是一個(gè)不會(huì)向后兼容(backward-compatible)的API變化使用主版本號(hào)。當(dāng)添加新的特性且API變化是向后兼容的時(shí)候使用次版本號(hào)。 如果只是對(duì)Bug進(jìn)行修復(fù)可以使用包版本號(hào)。

幸運(yùn)的是,你可以使用semantic-release這個(gè)模塊自動(dòng)化你的JavaScript的模塊發(fā)布。

關(guān)于如何成為一個(gè)更好的Node.js開發(fā)者就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。


新聞標(biāo)題:如何成為一個(gè)更好的Node.js開發(fā)者
URL分享:http://weahome.cn/article/pocejo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部