是一個以webkit(V8)引擎來渲染和解析JS的平臺javascript
- 在沒有NODE以前,JS是一門基於客戶端瀏覽器運行的腳本編程語言;JS是前端編程語言;
- 在有了NODE以後,JS也能夠運行在NODE環境中了,咱們能夠把NODE安裝在服務器端,這樣咱們就能夠在服務器端執行JS,JS也能夠處理服務器端的業務邏輯了;JS是後臺編程語言;
JS是全棧編程語言html
JS運行在瀏覽器中,瀏覽器提供了不少內置的屬性和方法(window全局對象);JS若是運行在NODE環境下,它也提供了不少的屬性和方法(global全局對象);前端
傳統後臺語言:JAVA、PHP、C#、.NET…
NODE做爲後臺運行的環境,拿JS編程的優點:java
node把全部的js按照模塊進行劃分,分爲:node
一、下載安裝第三方模塊web
全部的第三方模塊都在npmjs.com上
在命令窗口中執行 「npm install 模塊名」 來安裝,把須要使用的第三方模塊安裝到項目目錄下
npm就是NODE中用來管理模塊的命令,npm install 是安裝,npm uninstall 是卸載…npm
二、導入編程
require
例如:var less = require(‘less’);瀏覽器
三、使用緩存
less.render()
四、若是咱們想把LESS等第三方模塊添加到命令行中,咱們須要把LESS安裝在全局NODE環境下;
npm install less -g
安裝成功後執行 lessc -v ,能夠查看到版本號
在NODE環境下,咱們建立的每個JS均可以理解爲一個單獨的模塊,模塊和模塊之間沒有衝突。咱們常常須要實現模塊和模塊之間的相互調用(例如B調取A中的fn方法):
- 首先在B模塊中導入A模塊:var A=require(‘./A’); 即便在同一級目錄下,咱們也須要加./,若是不加的話默認找的是node_modules下的模塊,而不是咱們自定義的模塊
- 其次還須要在A模塊中把供外面使用的方法暴露出來:module.exports={fn:fn};
- 最後在B模塊中就能夠經過使用:A.fn() 執行對應的方法了
//A.js function fn() { console.log(1); } module.exports = { fn: fn }; //B.js function fn() { console.log(2); } var A = require('./A'); A.fn();
思考題:建立三個自定義模塊,A/B/C,A模塊中有一個方法」任意數求和sum」,B模塊中有一個方法「求平均數avg」,在B中須要調取A中的sum方法,在C模塊中點去B模塊中的avg方法,實現獲取:98 95 92 96 95 94 92 98 93 90 這十個分數的平均數…
//A.js function sum() { var total = null; arguments.__proto__ = Array.prototype; arguments.forEach(function (item, index) { item = Number(item); !isNaN(item) ? total += item : null; }); return total; } module.exports = { sum: sum };
//B.js var a = require('./A'); function avg() { arguments.__proto__ = Array.prototype; arguments.sort(function (cur, next) { return cur - next; }); arguments.pop(); arguments.shift(); //a.sum(arguments) -> a.sum([98,95,96...]) 目標:a.sum(98,95,96...) return (a.sum.apply(null, arguments) / arguments.length).toFixed(2); } module.exports = { avg: avg };
//C.js var b = require('./B'); console.log(b.avg(98, 95, 92, 96, 95, 94, 92, 98, 93, 90));
node天生提供好的模塊,node主要應用於服務器端開發,理解服務器端須要作的事情,咱們也就理解node內置模塊了。
服務器端須要作的事情
- 建立服務,監聽端口號
- 接收和解析客戶端的請求
- 在服務器上把客戶端須要的內容找到(文件內容的讀取)
- 把找到的內容返回
經常使用的內置模塊:http、url、fs…
一、http
建立服務、監聽端口、接收信息、返回內容…
var server1=http.createServer([callback]); 建立一個服務,這塊的回調函數不是在服務建立成功就會執行,而是須要客戶端向當前的服務器發送請求,它纔會執行(客戶端只要發送一個請求,它就會被觸發一次執行)。
server1.listen([port],[callback]); 給建立的服務監聽端口號(0-65535之間),端口號不能重複,當服務建立成功端口號也監聽成功後就會執行對應的回調函數;
啓動服務後,服務在不出現意外或者錯誤的狀況下是不會中止的,隨時監聽客戶端的請求,完成咱們的響應操做。
二、服務建立成功後如何的向當前服務發送請求
三、url模塊
var url=require(‘url’);
url.parse([string],[boolean]) : 解析一個URL地址,能夠把地址中的每一部分分別獲取到
- [string] 要解析的URL地址字符串
- [boolean] 設定是否把問號傳參的值解析爲對象,默認是false不解析,寫true則爲解析
案例:
var url = require('url'); var str = 'http://www.zhufengpeixun.com:80/student/index.html?name=zxt&age=30#haha'; var result = url.parse(str); console.log(result); //->結果以下 { protocol: 'http:', //->協議 slashes: true, //->是否有斜線 auth: null, //->做者 host: 'www.zhufengpeixun.com:80', //->域名+端口 port: '80', //->端口 hostname: 'www.zhufengpeixun.com', //->域名 hash: '#haha', //->哈希值 search: '?name=zxt&age=30', //->問號傳參 query: 'name=zxt&age=30', //->問號傳參,不帶問號 pathname: '/student/index.html', //->路徑名稱 path: '/student/index.html?name=zxt&age=30', //->路徑名稱+問號傳參 href: 'http://www.zhufengpeixun.com:80/student/index.html?name=zxt&age=30#haha' //->原始字符串 } //若是第二個參數設爲true的話: { ... query: { name: 'zxt', age: '30' }, pathname: '/student/index.html' ... } //->query是以對象鍵值對的方式存儲的
四、fs模塊
實現對服務器上的文件進行I/O操做的
var fs=require(‘fs’);
- fs.readFileSync 同步讀取文件中的內容
var con=fs.readFileSync(‘./index.html’);
第一個參數是讀取文件的路徑地址
第二個參數是讀取文件內容的編碼格式
讀取出來的內容是字符串格式的- fs.readFile 異步讀取文件中的內容
fs.readFile(‘./index.html’,function(){
讀取成功後觸發會發回調函數執行
});
除了讀取內容之外還能夠向文件中寫入內容
fs.writeFileSync([pathname],[content],[encode])
- 第一個參數是路徑名稱
- 第二個參數是須要寫入的內容(注意只能是字符串或者buffer格式的數據)
- 第三個參數是編碼格式,通常經常使用’utf-8’