91在线视频播放|成人黄视频在线观看|在线视频福利|天天欲色成人综合网站|国产国语videosex护士

機構檔案
  • 機構級別:普通會員
  • 信用等級:

在線交談:點擊這里給我發消息

咨詢熱線:029-62258374

學校評價(我要提問/點評)

  • 學校被點評:0
  • 好評(0%)
  • 中評(0%)
  • 差評(0%)

資料認證

    未通過身份證認證 未通過身份證認證

    未通過辦學許可認證 未通過辦學許可認證

  • 學校瀏覽人次:
  • 加盟時間:2017年03月10日
新聞動態

西安尚學堂Node.js中你需要知道的知識點

發布者:西安尚學堂 發布時間:2017-04-17 來源:西安尚學堂

Node.js是一個Javascript運行環境,實際上它是對Google V8引擎進行了封裝。V8引 擎執行Javascript的速度非常快,性能非常好。Node.js對一些特殊用例進行了優化,提供了替代的API,使得V8在非瀏覽器環境下運行得更好。Node.js是一個基于Chrome JavaScript運行時建立的平臺, 用于方便地搭建響應速度快、易于擴展的網絡應用。深圳尚學堂的小編給大家分享一些在Node.js中常用的一些知識點。

Node.js中你需要知道的知識點

querystring:可以用作通用解析器的模塊

有時候我們會從數據庫或其他地方得到這種奇怪格式的字符串:name:Sophie;shape:fox;condition:new,一般來說我們會利用字符串切割的方式來講字符串劃分到JavaScript Object。不過querystring也是個很好的現成工具:

  const weirdoString = `name:Sophie;shape:fox;condition:new`;
  const result = querystring.parse(weirdoString, `;`, `:`);
  // result:
  // {
  // name: `Sophie`,
  // shape: `fox`,
  // condition: `new`,
  // };

V8 Inspector

以--inspect參數運行你的Node應用程序,它會反饋你某個URL。將該URL復制到Chrome中并打開,你就可以使用Chrome DevTools來調試你的Node應用程序。

Server.listen 可以使用Object作為參數

命名參數的方式調用函數,相較于按照順序的無命名參數法更直觀。Server.listen也可以使用某個Object作為參數:

  require(`http`)
  .createServer()
  .listen({
  port: 8080,
  host: `localhost`,
  })
  .on(`request`, (req, res) => {
  res.end(`Hello World!`);
  });

不過這個特性不是表述在http.Server這個API中,而是在其父級net.Server的文檔中。

相對地址

傳入fs模塊的距離可以是相對地址,即相對于process.cwd()。

  const fs = require(`fs`);
  const path = require(`path`);
  // why have I always done this...
  fs.readFile(path.join(__dirname, `myFile.txt`), (err, data) => {
  // do something
  });
  // when I could just do this?
  fs.readFile(`./path/to/myFile.txt`, (err, data) => {
  // do something
  });

使用setInterval執行定時任務

使用setInterval來定期執行數據庫清理任務,不過默認情況下在存在setInterval的時候NodeJS并不會退出,你可以使用如下的方法讓Node沉睡:

  const dailyCleanup = setInterval(() => {
  cleanup();
  }, 1000 * 60 * 60 * 24);
  dailyCleanup.unref();
  Use Signal Constants

如果你嘗試在NodeJS中殺死某個進程,估計你用過如下語法:

 process.kill(process.pid, `SIGTERM`);

既然第二個參數可以同時使用字符串與整形變量,那么還不如使用全局變量呢:

process.kill(process.pid, os.constants.signals.SIGTERM);

IP Address Validation

NodeJS中含有內置的IP地址校驗工具,這一點可以免去寫額外的正則表達式:

  require(`net`).isIP(`10.0.0.1`) 返回 4
  require(`net`).isIP(`cats`) 返回 0

os.EOF

NodeJS內置了os.EOF,其在Windows下是rn,其他地方是n,使用os.EOL能夠讓你的代碼在不同的操作系統上保證一致性:

  const fs = require(`fs`);
  // bad
  fs.readFile(`./myFile.txt`, `utf8`, (err, data) => {
  data.split(`\r\n`).forEach(line => {
  // do something
  });
  });
  // good
  const os = require(`os`);
  fs.readFile(`./myFile.txt`, `utf8`, (err, data) => {
  data.split(os.EOL).forEach(line => {
  // do something
  });
  });

HTTP 狀態碼

NodeJS幫我們內置了HTTP狀態碼及其描述,也就是http.STATUS_CODES,鍵為狀態值,值為描述。你可以按照如下方法使用:

  someResponse.code === 301; // true
  require(`http`).STATUS_CODES[someResponse.code] === `Moved Permanently`; // true

避免異常崩潰

有時候碰到如下這種導致服務端崩潰的情況還是挺無奈的:

  const jsonData = getDataFromSomeApi(); // But oh no, bad data!
  const data = JSON.parse(jsonData); // Loud crashing noise.

為了避免這種情況,可以在全局加上了一個:

 process.on(`uncaughtException`, console.error);

當然,這種辦法絕不是最佳實踐,如果是在大型項目中需要使用PM2,然后將所有可能崩潰的代碼加入到try...catch中。

Just this once()

除了on方法,once方法也適用于所有的EventEmitters,:

  server.once(`request`, (req, res) => res.end(`No more from me.`));

Custom Console

你可以使用new console.Console(standardOut,errorOut),然后設置自定義的輸出流。你可以選擇創建console將數據輸出到文件或者Socket或者第三方中。

DNS lookup

Node并不會緩存DNS查詢信息,因此在使用URL之后要等個幾毫秒才能獲取到數據。不過你可以使用dns.lookup()來緩存數據:

  dns.lookup(`www.myApi.com`, 4, (err, address) => {
  cacheThisForLater(address);
  });

fs 在不同OS上有一定差異

•fs.stats()返回的對象中的mode屬性在Windows與其他操作系統中存在差異。

•fs.lchmod()僅在macOS中有效。

•僅在Windows中支持調用fs.symlink()時使用type參數。

•僅僅在macOS與Windows中調用fs.watch()時傳入recursive選項。

•在Linux與Windows中fs.watch()的回調可以傳入某個文件名

•使用fs.open()以及a+屬性打開某個目錄時僅僅在FreeBSD以及Windows上起作用,在macOS以及Linux上則存在問題。

在Linux下以追加模式打開某個文件時,傳入到fs.write()的position參數會被忽略。

net 模塊差不多比http快上兩倍

關于net和http二者性能的討論,可以通過運行兩個服務器來進行比較。根據比較結果:http.Server大概每秒可以接入3400個請求,而net.Server可以接入大概5500個請求。

REPL tricks

•如果是在REPL模式下,就是直接輸入node然后進入交互狀態的模式。可以直接輸入.load someFile.js然后可以載入包含自定義常量的文件。

•可以通過設置NODE_REPL_HISTORY=""來避免將日志寫入到文件中。

•_用來記錄最后一個計算值。

•在REPL啟動之后,所有的模塊都已經直接加載成功。可以使用os.arch()而不是require(os).arch()來使用。

以上就是在Node.js中需要知道的一些基本知識點,希望你在了解了這些知識點后更好的學習Node.js。