node(基礎)
一、前言 Node.js 是一個基於 Chrome V8 引擎的 JavaScript 運行環境。 Node.js 使用了一個事件驅動、非阻塞式 I/O 的模型,使其輕量又高效。node.js現在已經成為前端工程師的必備技能。
本節涉及的基礎內容:
1. node中的javascript
2.http服務能力
3.文件操作能力
一、知識
1、打開cmd窗口的三種方式
方式一:傳統的cmd cd到我們要操作的目錄
方式二:shift + 鼠標右鍵,選擇快速打開窗口命令
方式三:如果你的電腦裝了git 選中要操作的項目 --》右擊--》git bash here
2、使用node來解析和執行文件
第一步:用編輯器建立腳本文件
第二步:使用上面的方式定義到項目目錄
第三步:在cmd框中輸入 node + project.js 執行node文件(這裏的文件名不能起做node.js,最好不要含有中文)
3、node.js中的javascript
(1)node中沒有BOM、DOM
驗證:在你的工程目錄下新建js文件---》打開當前的命令提示框---》執行node 文件 ,說明node裏面並沒有BOM、DOM
console.log(document);
console.log(window)
(2)node中包含一些基本的EcmaScript基本的語言
比如:變量,方法,數據類型,內置對象,Array, Object, Date, 等
可以參考:http://www.w3school.com.cn/js/index.asp
(3)一些核心模塊如:FS(文件操作)
4、node中的文件操作能力
在node中如果想要對文件進行操作就必須引入FS核心模塊,核心模塊中提供了文件操作相關的API
讀取文件:readFile(第一個參數,第二個參數) 第一個參數:是讀取的文件路徑 ,第二個參數:是一個回調函數
在目錄下建一個文本文件和一個js文件
1)
2)
//第一步:用require來加載核心模塊 var fs=require(‘fs‘); //第二步:調用這個API fs.readFile(‘hello.txt‘,function(error,data){ console.log(error); //讀取成功返回null, console.log(data); })
3)執行文件
我們發現當讀取成功的時候,error返回的是null data中返回的是用十六進制輸出的數據,為什麽是十六進制的數據呢?是因為計算機只認識二進制的,但是沒有找到二進制數據,就將我們的文本內容轉化為16進制
接下來:用toString()來轉化
//第一步:用require來加載核心模塊 var fs=require(‘fs‘); //第二步:調用這個API fs.readFile(‘hello.txt‘,function(error,data){ if(error){ console.log(‘讀取失敗‘); }else{ console.log(data.toString()); } })
小提示:如果發現命令提示符輸出的中文為亂碼,可以百度搜索解決 https://jingyan.baidu.com/article/fcb5aff775f3e3edaa4a71dd.html
寫入文件:fs.writeFile(第一個參數,第二個參數,第三個參數) 第一個參數:為文件路徑,第二個參數為:文件內容,第三個參數為回調函數function(error){}
//第一步:用require引入fs模塊 var fs =require(‘fs‘); //第二步:用上面的對象調用API fs.writeFile(‘./hellonode.txt‘,‘想要學好node‘,function(error){ if(error){ console.log(‘寫入失敗‘); }else{ console.log(‘寫入成功‘); } });
小提示:平時我們保存文件的時候,文件的命名不能有特殊的符號,比如:* / ?之類的
5、node中的http服務
(1) 先了解幾個概念:
端口號:是用來定位對應的具體程序的,所有需要聯網通信的程序都要占用端口號
IP地址:是用來定位計算機的
服務器:提供對數據的服務,發請求,接受請求,給用戶一些反饋
還是不理解端口號和IP作用的話引用一個前輩的圖來解釋:
我們在訪問瀏覽器,用微信,QQ等軟件進行通信的時候需要訪問服務器,那麽服務器就是通過不同軟件對應的不同軟件來區分接收到的是哪個應用程序的信息。然後在返回給客戶端想要的信息。
並且要知道端口號和ip地址才能訪問(會不會有疑問我們訪問百度的時候沒有帶端口號呀)?
客戶端的瀏覽器會自動開啟端口號,所以只要客戶端來請求,服務端就知道客戶端端口號
可以同時開啟多個服務,但是一定確保不同服務占用端口號不一致
說白了,在一臺計算機中,同個端口號,同一時間只能被一個程序使用
(2)使用node來輕松構建一個web服務器
//第一步:加載http核心模塊 var http = require(‘http‘); //第二步:調用createServer()方法來創建 var server=http.createServer(); //第三步:註冊request事件,當客戶端發過來請求之後執行回調函數,對接受的數據進行反饋 server.on(‘request‘,function(){ console.log(‘接受到了客戶端的請求,請通過服務端http://localhost:3000訪問‘); }); //第四步:給我們的服務器設置一個端口號,客戶端要知道這個端口號才能訪問 server.listen(3000,function(){ console.log(‘服務啟動成功了‘); });
啟動服務器:
之後瀏覽器中輸入 localhost:3000訪問我們的服務器,服務器接受到響應執行回調
web服務器的響應:平時我們訪問百度,或者其他網站的時候,會根據輸入不同的訪問路徑返回給客戶端不同的信息,那麽他們是怎麽做的呢?
請求百度:
返回給我們百度首頁:
如果找不到輸入的路徑就會反饋給我們一個錯誤提示頁
所以我們可以知道,服務器就是看這個Request URL來區別用戶查找的不同內容,並且給出不同的反饋
優化剛剛的代碼,並且用write()函數讓瀏覽器反饋
var http = require(‘http‘); var sever=http.createServer(); sever.on(‘request‘,function(request,response){ if(request.url===‘/‘){ response.write(‘index js‘); }else if(request.url===‘/login‘){ console.log(‘登錄‘); }else{ console.log(‘404 not found‘); } }); sever.listen(3000,function(){ console.log(‘服務器已經啟動‘); })
下面通過不同的訪問路徑來訪
發現上面的中文亂碼了,為什麽?因為服務器響應的類型只能為二進制和字符串,具體解決方法看下篇
一、總結
- Node.js 中的 JavaScript
- 沒有 BOM、DOM
- EcmaScript 基本的 JavaScript 語言部分
- 在 Node 中為 JavaScript 提供了一些服務器級別的 API
- 文件操作的能力
- http 服務的能力
- http服務:
- require
- 端口號
- ip 地址定位計算機
- 端口號定位具體的應用程序
- Content-Type
- 服務器最好把每次響應的數據是什麽內容類型都告訴客戶端,而且要正確的告訴
- 不同的資源對應的 Content-Type 是不一樣,具體參照:http://tool.oschina.net/commons
- 對於文本類型的數據,最好都加上編碼,目的是為了防止中文解析亂碼問題
- 通過網絡發送文件
- 發送的並不是文件,本質上來講發送是文件的內容
- 當瀏覽器收到服務器響應內容之後,就會根據你的 Content-Type 進行對應的解析處理
node(基礎)