1. 定義:什麼時候何地都能使用,不須要引入;node
2. process.env:環境變量,執行Node命令console.log(process.env)
,相似於電腦的系統變量 :segmentfault
3. process.argv:在D:nodeindex.js中,輸入console.log(process.argv)
,而後在命令行工具中輸入node index.js
,發現打印了一個長度爲2的數組,咱們再試下在後面添加一些信息,輸入node index.js a b 12 34 大海
,結果以下圖:數組
咱們發現,a在數組的第2個位置,b在第3個位置……,也就是說這裏至關於收錄用戶的輸入內容?因而,咱們能夠利用這一點實現一個簡單的加法計算器!index.js代碼修改以下:瀏覽器
// 將數組第2位的數做爲被加數,注意將字符串轉爲整形 let num1 = parseInt(process.argv[2]) // 將數組第3位的數做爲加數 let num2 = parseInt(process.argv[3]) // 打印兩者的和 console.log(num1 + num2)
命令行輸入node index.js 1 2
,結果:3
服務器
4. __dirname:當前文件目錄,index.js
:app
console.log(__dirname)
命令行輸入node index.js
,結果:D:\node
異步
1. 定義:須要require,但不須要額外下載;工具
2. path:用於處理文件路徑和目錄路徑的實用工具 ,index.js
代碼修改以下:ui
let path = require('path') console.log(path.dirname('/node/a/b/c/1.jpg')) // 文件路徑 console.log(path.basename('/node/a/b/c/1.jpg')) // 文件名 console.log(path.extname('/node/a/b/c/1.jpg')) // 文件擴展名 console.log(path.resolve('/node/a/b/c', '../../', 'd')) // 在c的上級的上級(即a下面)添加一個d console.log(path.resolve(__dirname, 'index.js')) // 這樣能夠獲得index.js的絕對路徑
命令行輸入node index.js
,結果以下:
/node/a/b/c 1.jpg .jpg D:\node\a\d D:\node\index.js
3. fs:用於文件讀寫操做
(1). 讀文件:fs.readFile()
let fs = require('fs') // 第一個參數是文件路徑 fs.readFile('./a.txt', (err, data) => { if (err) { console.log(err) } else { console.log(data) console.log(data.toString()) } })
在index.js同級目錄下新建a.txt
,內容爲abc,命令行輸入node index.js
,結果:
<Buffer 61 62 63> // abc的二進制格式 abc // 調用.toString()才能打印abc
(2). 寫文件:fs.writeFile()
let fs = require('fs') fs.writeFile('b.txt', '月薪2萬', (err) => { if (err) { throw err } })
命令行輸入node index.js
,結果:D:node下多了一個b.txt
文件,內容爲「月薪2萬」。若是改爲「月薪3萬」再執行一遍,b.txt
文件內容就是「月薪3萬」,如何作到不覆蓋而是追加呢?加一個{flag: 'a'}
(「a」表示append)便可:
fs.writeFile('b.txt', '月薪2萬', {flag: 'a'}, (err) => {...})
以上都是異步的(推薦),咱們看看同步的方式:
// 同步讀 let data = fs.readFileSync('./a.txt') console.log(data.toString()) // abc // 同步寫 fs.writeFileSync('b.txt', '鼠你好運')
1. 定義:require本身封裝的模塊;
2. exports:導出模塊,咱們在D:node下新建mod.js
,向外暴露a和b:
exports.a = 1 exports.b = 2
修改index.js
:
const mod = require('mod') // .js能夠省略 console.log(mod.a) console.log(mod.b)
命令行執行index.js
,發現報錯:找不到mod.js。緣由是引用路徑不對,正確的路徑應該爲'./mod',這樣就能拿到a和b了。
其實,若是不加'./'具體路徑,Node默認從node_modules文件夾下加載該模塊。
若是既沒有指明路徑,又沒有node_modules文件夾,就會從Node的安裝目錄處找(裏面也有一個node_modules文件夾,安裝了一些全局的模塊)。
3. module:導出對象、方法、類,修改mod.js
代碼:
// 經過導出對象以達到批量導出的目的 module.exports = { a: 1, b: 2 } // 或導出方法 module.exports = function () { console.log(123) } // 或導出類 module.exports = class { constructor (name) { this.name = name } show () { console.log(this.name) } }
修改index.js
:
const mod = require('./mod') // 若引入的是一個對象 console.log(mod.a) // 1 console.log(mod.b) // 2 // 若引入的是一個方法 mod() // 123 // 若引入的是一個類 let m = new mod('大海') m.show() // 大海
服務器對象:http.createServer()
,快速搭建一個服務器,依然修改D:nodeindex.js:
let http = require('http') http.createServer(() => { console.log('我來啦') }).listen(8080)
命令行執行node index.js
,接着新開一個瀏覽器窗口,訪問localhost:8080
,如今再打開命令行工具,發現已經打印了「我來啦」(訪問多少次就打印多少次),再繼續修改index.js
:
let http = require('http') // 加入請求和響應參數 http.createServer((req, res) => { // 在頁面上打印‘index’ res.write('index') // 須要標明結束 res.end() // 或直接 res.end('index') }).listen(8080)
命令行執行node index.js
,瀏覽器訪問localhost:8080
,頁面出現「index」:
爲了讓頁面內容豐富一點,咱們在D:node下新建一個網頁文件a.html
,內容爲一句話加一張圖(準備一張圖片blog.jpg放入D:node):
<!DOCTYPE html> <html> <head> <title>Page Title</title> </head> <body> <h1>Welcome To My Blog</h1> <img src='./blog.jpg' alt='img'/> </body> </html>
這裏須要使用上面講到的fs
文件讀寫的內容,修改index.js
:
let http = require('http') // 須要讀網頁和圖片文件 let fs = require('fs') http.createServer((req, res) => { // req.url就是須要訪問的文件路徑:/a.html 和 /blog.jpg fs.readFile(`.${req.url}`, (err, data) => { if (err) { res.writeHead(404) res.end('404 page not found!') } else { res.end(data) } }) }).listen(8080)
命令行執行node index.js
,瀏覽器訪問localhost:8080/a.html
:
也能夠直接訪問圖片localhost:8080/blog.jpg
: