初識nodejs

簡介

前端工程師須要學習nodejs來擴充本身的知識邊界,也讓本身更方便的理解webpack,前端工程化等。javascript

1. process

process對象是node中的一個全局變量,它提供了nodejs進程的信息並對其進行控制,做爲全局變量,process始終能夠直接使用。前端

argv是咱們常會見到一個屬性,process.argv返回一個數組,包含了在運行node代碼時命令行中輸入的值。舉個例子假如咱們運行一段node代碼,並在命令行中添加一些參數:$ node app.js xiaoming 2,那麼process.argv的值即爲['node', '/path/to/your/app.js', 'xiaoming', 2]vue

這個屬性值仍是比較常見的,在vue-cli2中的webpack配置中就使用到了。根據後面的參數來判斷當前是啓動的是開發仍是打包、測試等環境,來加載不一樣的webpack配置。有興趣的能夠自行vue的webpack配置代碼中去查看。java

2. fs文件系統

node做爲後端程序,i/o處理能力天然是其核心能力之一。fs模塊提供了一個能夠與文件系統進行交互的api,全部的文件操做都同時具備同步和異步兩種方式。使用時須要先引入fs模塊const fs = require('fs');node

2.1 readFile和readFileSync

fs.readFile('/path/to/file/',()=>{})fs.readFileSync('/path/to/file/'),分別是fs操做文件系統的異步(不阻塞)和同步(阻塞)兩種方法。node中只要是以sync結尾的方法皆爲同步(阻塞)操做。webpack

用法簡介:web

const fs =  require('fs');

// 1.異步讀取文件,讀取的數據在其回調函數中
fs.readFile('/path/to/file', (err, res) => {
  const result = '';
  // res表示異步讀取文件內容,默認是buffer格式
  // 對獲取res文件添加狀態監聽
  res.on('data',(data) => {
    result += data;
  });
  // 監聽res的end狀態,表示文件讀取完畢了
  res.on('end', () => {
    // 此時的result表示獲取的所有文件內容
  });
})

// 2.同步讀取文件
const data = fs.readFileSync('/path/to/file/');

複製代碼

咱們能夠看到,獲取文件內容時,默認是一種buffer格式,這個格式是node中爲了處理tcp流和文件系統操做中的二進制數據而引入的api。vue-cli

2.2 readdir和readdirSync

這兩個函數的使用方法和readFile、readFileSync類似,讀取一個文件路徑,返回的是一個相應文件目錄下的文件名稱的數組。使用方法分別爲fs.readdir('/filePath',(err, list)=>{ });const list = fs.readdirSync('/filePath');後端

3.模塊化module.exports和require

上面咱們看到,在node中如何想使用其餘模塊,方式是使用require引入。其實在node中,咱們也能夠開發本身的模塊並引入使用。前端工程化

示例代碼:

// module.js
module.exports = function(args) {
  // 這裏開發本身模塊的邏輯
}

// your program
const myModule = require('module.js');
...
複製代碼

在開發本身模塊的時候有幾個原則:

1.導出一個函數,這個函數能夠準確接受本身所須要的參數

2.模塊程序不要改變其餘任何東西,好比全局變量

3.不要在模塊中作任何輸出,應該將處理的結果返回出去由使用的程序處理

4.若是本身的模塊是個異步操做,則接受的參數中須要有回調函數callback

5.當有錯誤發生,或者有數據的時候使用回調函數進行處理

6.回調函數需按照node習慣,err錯誤處理做爲函數的第一個參數function callback(err, data){}

4. http模塊

http模塊是node最重要的核心功能之一,能夠用來處理http請求和生成一個簡單的http服務。先來看一下使用http模塊的幾個簡單應用場景。

// 引入
const http = require('http');

// 1.發起一個簡單的http請求
http.get('/url', function(err, res){
  // res參數是node中的stream類型對象
  // 能夠理解成會觸發一些事件的對象
  res.on('data', function(data){
    // 對res進行監聽,獲取到的data是buffer對象
  });
  res.on('end', function() {

  });
});

// 2.生成一個本地的server,端口爲3000
const  server = http.createServer(function(req, res) {
// req表示請求,res表示響應
});
server.listen(3000);

複製代碼

參考文章

learnyounode官網

node中文官網


做者簡介: 宮晨光,人和將來大數據前端工程師。

相關文章
相關標籤/搜索