JavaScript >> Javascript 文檔 >  >> Node.js

使用 Node.js 應該停止做的七件事

受到 Burke Holland 的 jQuery 你應該停止做的 5 件事的啟發,我決定開始討論並強調你應該立即停止使用 Node.js 做的 7 件事:

  1. 停止使用回調
  2. 停止使用* 對於版本
  3. 停止使用 console.log 用於調試
  4. 停止使用 GETPOST 適合一切
  5. 停止使用分號
  6. 停止使用逗號優先樣式
  7. 停止使用默認的 maxSockets 限制您的連接 價值

停止在 Node.js 中使用回調

回調是 JavaScript/Node.js 語言和主要模式的麵包和黃油(或古生活方式讀者的肉類和蔬菜)。但是,你應該停止使用回調來嵌套多個方法的代碼,除非你想以回調地獄告終。

異步是為了勝利。特別是它的 series()waterfall() 方法。

為了說明巨大的差異,這裡是一個我們執行多個操作的示例使用回調 查找用戶,然後查找屬於該用戶的帖子:

codeA(function(a){
  codeB(function(b){
    codeC(function(c){
      codeD(function(d){
        // Final callback code        
      })
    })
  })
})

series 例子:

async.series([
  function(callback){
    // code a
    callback(null, 'a')
  },
  function(callback){
    // code b
    callback(null, 'b')
  },
  function(callback){
    // code c
    callback(null, 'c')
  },
  function(callback){
    // code d
    callback(null, 'd')
  }],
  // optional callback
  function(err, results){
    // results is ['a', 'b', 'c', 'd']
    // final callback code
  }
)

waterfall 例子:

async.waterfall([
  function(callback){
    // code a
    callback(null, 'a', 'b')
  },
  function(arg1, arg2, callback){
    // arg1 is equals 'a' and arg2 is 'b'
    // Code c
    callback(null, 'c')
  },
  function(arg1, callback){      
    // arg1 is 'c'
    // code d
    callback(null, 'd');
  }], function (err, result) {
   // result is 'd'    
  }
)

停止使用通配符* 對於帶有 Node.js 的版本

通配符 * 而不是 package.json 中的版本號 似乎是個好主意——在不久的將來自動更新。錯誤的!您應該使用準確的版本號來防止任何第三方模塊更改破壞您的應用程序並在半夜吵醒您想知道發生了什麼。

如果您不提交 node_modules,則尤其如此 文件夾或不使用收縮包裝。

HackHall package.json 的一個壞例子 大約在 2013 年夏天:

{
    "name": "hackhall",
    "version": "0.0.1",
    "private": true,
    "main": "server",
    "scripts": {
        "start": "node server"
    },
    "dependencies": {
        "express": ">=2.2.0",
        "jade": "*",
        "mongodb": "*",
        "mongoose":"",
        "oauth":"*"
    },
    "devDependencies":{
        "mocha": "",
        "superagent":""
    },
    "engines": {
      "node": ">=0.6"
    }
}

來自 Practical Node.js 書籍 [2014, Apress] 的一個很好的例子:

{
  "name": "blog-express",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node app.js",
    "test": "mocha test"
  },
  "dependencies": {
    "express": "3.4.5",
    "jade": "0.35.0",
    "mongoskin": "~0.6.1",
    "stylus": "~0.40.3",
    "mocha": "1.16.2",
    "superagent": "0.15.7",
    "expect.js": "0.2.0"
  }
}

如果不想每次都去npm官網查看版本,可以使用$ npm install package_name --save 這會將版本號保存在 package.json 中。

如果模塊已經安裝,你可以:

  • 輸入 $ npm ls
  • 打開包文件夾,複製版本號形式package.json

停止使用 console.log 用於調試 Node.js 應用程序

什麼是最好的調試器?對,是console.log !它快速、不間斷,並為我們提供了我們要求的任何信息(比如討厭的變量的值)。那你為什麼要停止使用它呢?因為像 Node Inspector 這樣的真正調試器不僅提供了您剛剛硬編碼的變量的值,而且還為您提供了在進程內部環顧四周的動態能力。

[旁注]

閱讀博客文章很好,但觀看視頻課程更好,因為它們更具吸引力。

許多開發人員抱怨 Node.js 上缺乏負擔得起的高質量視頻材料。觀看 YouTube 視頻會讓人分心,花 500 美元購買 Node 視頻課程很瘋狂!

去看看 Node University,它有關於 Node 的免費視頻課程:node.university。

[旁注結束]

例如,我可能有一個不正確的條件(其中 resubmit 是一個布爾值):

if (resubmit && post.published && user.plan.paid && post.isVisible) {
  // code A
} else {
 // code B
}

使用 console.log 我只能輸入 console.log(resubmit) , 或 console.log(resubmit, ...) 其他一些變量。但是,使用調試器,我可以四處尋找並打印我在該範圍內可以訪問的任何內容。如果這還不夠,我將跳過或跨入代碼 A 或 B,如示例所示。

停止使用 GETPOST 適用於 Node.js 服務器中的所有內容

停止使用 GETPOST 對於所有傳入的 HTTP 請求。具象狀態轉移應用程序編程接口方法(RESTful API)有 PUTDELETE 所以使用它們進行更新和刪除 (維基)。

例如在這個 Express.js 路由中,您可以使用 PUT,而不是使用 POST 來更新記錄:

app.post('/comments/update/:id', routes.comments.update)
app.put('/comments/:id', routes.comments.update)

如需更多信息,請查看 REST API 教程。

停止在 Node.js 中使用分號

分號實際上是可選的,因為 ECMAScript(Node.js 和瀏覽器 JavaScript 實現的標準)具有自動分號插入功能 (ASI)。這是關於 ASI 的 ECMAScript 6 (ES6) 文檔的草稿。

要點是 分號是可選的 並且除了兩種情況:在 IIFE 前面和 for 內部 循環。

使用分號的問題:

  • 要輸入的額外字符: 在一個 1000 行的文件中,至少會有 1000 個額外的符號
  • 不一致: 當由於疏忽而遺漏分號時,代碼庫仍然可以工作,但會變得不一致(可以通過 linting 解決,但這是一個額外的構建步驟)

一些流行的 Node.js 項目是用無分號風格編寫的:

  • NPM:Node.js 包管理器
  • Request:用於發出 HTTP 請求的模塊

你是否還在懷疑,因為 Doug Crockford 告訴你必須使用分號?那麼也許你應該閱讀一封致 JavaScript 領導者的關於分號的公開信。

停止使用逗號優先樣式

好的,這個話題非常主觀,可能並不那麼重要,但我想表達我對逗號優先風格的不喜歡。請停止瘋狂!

當人們可能在行的開頭而不是結尾用逗號編寫數組和對象時,經常會看到有問題的樣式。例如,我們可以定義一個數組:

var arr = [ 'nodejs'
  , 'python'
  , 'ruby'
  , 'php'
  , 'java'
]

或者以更傳統的風格,它看起來像這樣:

var arr = [ 'nodejs', 
  'python', 
  'ruby', 
  'php',
  'java'
]

請不要做前者。我不在乎捕捉丟失的逗號會好多少。逗號優先的風格看起來很荒謬,因為我們永遠不會在我們的正常語言寫作中使用這種風格。沒有人這樣寫:

Paleo lifestyle is good for ,adult men ,adult women ,children ,and elderly people.

在我看來,逗號優先的風格很難讓大腦適應,而且很傻。

停止使用默認 MaxSockets 值限制您的連接

默認 maxSockets 值為 5,它決定了每台主機的套接字數量限制(官方文檔)。

為避免系統出現瓶頸,只需使用以下內容:

var http = require('http')
http.globalAgent.maxSockets = 10

或者,如果你想讓它無限:

require('http').globalAgent.maxSockets = Infinity

這裡有一篇很好的對比文章 Node.js Connection Pooling。

另一種方法是一起禁用池(agent: false ) 就像 LinkedIn 所做的或 Substack 在他的超任務模塊中推薦的那樣。

關於停止使用 Node.js 做的事情的結論

當然,你應該立即停止使用 Node.js 做的這七件事的清單是主觀的,但它源於仔細和持續的觀察,以及一些痛苦的現實經驗(即 *package.json )。您列出的與 Node.js 無關的事項有哪些?


Tutorial JavaScript 教程
  1. 如何在 Flutter 中實現微光效果

  2. Javascript 中什麼是常量,什麼不是

  3. window.location.indexOf 在 Javascript 中不起作用

  4. 向 Nodejs 和 Expressjs 打個招呼

  5. 輔助項目之旅第 3 部分 - 後端規劃

  6. 為什麼需要開始使用 Intersection Observer

  7. 指南:使用 React 測試庫和 Jest 測試 Redux 連接組件

  1. React 中使用 useState() 的 Component 語法和 Component() 之間的一個實際區別

  2. 如何為 GitHub 生成 SSH 密鑰

  3. Javascript 基礎系列:塊

  4. 遷移到 Kinsta 並獲得 20% 的免費速度提升 — 由 Stats 提供支持

  5. I ❤ Ramda - 帶有特殊佔位符的部分應用程序

  6. 樣式 Dojo 小部件

  7. JavaScript / ReactJS 中的 For 循環

  1. 使用 NCM 避免 npm 替換攻擊

  2. 常見的遞歸面試挑戰

  3. 處理表格提交 II

  4. 以全屏模式查看代碼片段