1、nodeJS的特點
- 單線程:
好處:是減少了內存開銷;
缺點:就是一個用戶造成了線程的崩潰,整個服務都崩潰了,其他人也崩潰了。 - 非阻塞I/O
不會傻等I/O語句結束,而會執行后面的語句。 - 事件驅動event-driven:不管是新用戶的請求,還是老用戶的I/O完成,都將以事件方式加入事件環,等待調度。
2、HTTP模塊
Node.js中,將很多的功能,劃分為了一個個mudule,大陸的書翻譯為模塊;這是因為,有一些程序需要使用fs功能(文件讀取功能),有一些不用的,所以為了效率,你用啥,你就require啥。
//這個案例簡單講解http模塊
//引用模塊
const http = require("http");
//創建一個服務器,回調函數表示接收到請求之后做的事情
const server = http.createServer(function(req,res){
//req參數表示請求,res表示響應
console.log("服務器接收到了請求" + req.url);
res.writeHead(200,{"Content-Type":"text/html;charset=UTF-8"});
//設置響應頭:文字編碼
res.end();
});
//監聽端口
server.listen(3000,"127.0.0.1");
- req的作用:
最關鍵的就是req.url屬性,表示用戶的請求URL地址。所有的路由設計,都是通過req.url來實現的。
我們比較關心的不是拿到URL,而是識別這個URL。
識別URL,用到兩個新模塊,第一個就是url模塊,第二個就是querystring模塊
- 字符串查詢,用querystring處理
- 使用URL模塊
3、模塊
- node中的模塊分為三部分:
1、系統自帶模塊
2、自定義模塊:js文件和js文件之間有兩種合作的模式:- 某一個js文件中,提供了函數,供別人使用。 只需要暴露函數就行了; exports.msg=msg;
- 某一個js文件,描述了一個類。 module.exports = People;
3、第三方模塊
- 我們可以使用文件夾來管理模塊,比如
var bar = require("bar");
那么Node.js將會去尋找node_modules目錄下的bar文件夾中的index.js去執行。
每一個模塊文件夾中,推薦都寫一個package.json文件,這個文件的名字不能改。node將自動讀取里面的配置。有一個main項,就是入口文件:
{
"name": "wwr",
"version": "1.0.1",
"main" : "app.js"
}
package.json文件,要放到模塊文件夾的根目錄去。
- 我們可以用package.json來管理依賴。
在cmd中,使用npm init可以初始化一個package.json文件,用回答問題的方式生成一個新的package.json文件。
- 這樣解決兩個問題
1.我們的依賴包,可能在隨時更新,我們永遠想保持更新,或者某持某一個版本;
2.項目越來越大的時候,給別人看的時候,沒有必要再次共享我們引用的第三方模塊。
別人使用我們的項目的時候,只需要npm install 即可安裝相應的模塊