Node.js是什么
- JavaScript運(yùn)行時(shí)
- 不是語言,也不是框架,是一個(gè)平臺(tái)
- Node.js中的JavaScript
- 沒有BOM,DOM
- EcmaScript基本的JavaScript語言部分
- 在node中為JavaScript提供了一些服務(wù)器級(jí)別的API
安裝
訪問nodejs官網(wǎng),點(diǎn)擊藍(lán)色選框區(qū)域穩(wěn)定版,并下載https://nodejs.org/en/
-
打開終端 命令行檢測是否安裝成功
- node -v
-
執(zhí)行腳本文件
- 創(chuàng)建一個(gè)JS腳本文件
- 打開終端,定位到所在目錄
- 輸入
node 文件名執(zhí)行對(duì)應(yīng)的文件 - 解析文件 終端會(huì)讀取文件的內(nèi)容
注意文件名不能
node.js命名
文件數(shù)據(jù)操作
// 瀏覽器中的javaScript是沒有文件操作的能力的
// 但是node中的JavaScript具有文件操作的能力
//fs是 fileSystem的簡寫 就是文件系統(tǒng)的意思
/*
* 在node中 如果想要進(jìn)行文件操作,就必須引入fs這個(gè)核心模塊
*
* 在fs這個(gè)核心模塊中,提供了所有的文件操作相關(guān)的API
*
* 例如:fs.readFile就是用來讀取文件的
*
* */
//加載 fs 的核心模塊
var fs = require("fs");
// 2.讀取文件
/*
* 第一個(gè)參數(shù) 是路徑
*
* 第二個(gè)參數(shù) 會(huì)回調(diào)函數(shù)
*
* error 錯(cuò)誤(讀取失敗)
*
* data 數(shù)據(jù) (讀取成功)
*
* */
fs.readFile("data/hello.txt",function (error,data) {
/*
* data有數(shù)據(jù)的話 打印的是二進(jìn)制數(shù)據(jù)
*
* 要通過toString方法轉(zhuǎn)化成 我們認(rèn)識(shí)的字符串
*
* */
// 打印結(jié)果 <Buffer 0a 0a e8 bf 99 e6 98 af e4 b8 80 e4 b8 aa 20 e6 96 87 e4 bb b6 e8 af bb e5 8f 96>
console.log(data.toString());
});
創(chuàng)建node服務(wù)器
- 加載核心模塊
- 創(chuàng)建web服務(wù)器
- 注冊請(qǐng)求事件
- 綁定端口號(hào),啟動(dòng)服務(wù)器
//1.加載核心模塊
var htt = require("http");
//2.使用htt.createServer()創(chuàng)建一個(gè)web服務(wù)器
var server = htt.createServer();
//3.服務(wù)器 對(duì)數(shù)據(jù)服務(wù)
/*
* 發(fā)送請(qǐng)求
*
* 接收請(qǐng)求
*
* 處理請(qǐng)求
*
*
* 給個(gè)反饋(發(fā)送響應(yīng))
*
* */
// 注冊 request請(qǐng)求事件 當(dāng)客戶端請(qǐng)求過來,就會(huì)自動(dòng)觸發(fā)服務(wù)器的request請(qǐng)求事件
// 然后 執(zhí)行第二個(gè)參數(shù):回調(diào)處理
/*
* 2個(gè)參數(shù)
* Request 請(qǐng)求對(duì)象, 用來獲取 客服端的請(qǐng)求信息
*
* Response 響應(yīng)對(duì)象,可以用來給客戶端發(fā)送響應(yīng)消息
*
* */
server.on("request",function (request,response) {
//路徑
console.log("收到客戶端的請(qǐng)求了" + request.url);
// 根據(jù)不同的請(qǐng)求路徑 響應(yīng)不同的結(jié)果
// /index
// /login 登錄
// /register 注冊
if (request.url == "/index") {
response.write("home");
console.log("看看有沒");
} else if (request.url == "/login"){
response.write("login");
} else if (response.url == "/register"){
response.write("register");
} else {
// response 對(duì)象有一個(gè)方法:write 可以用客戶端發(fā)送響應(yīng)數(shù)據(jù)
//write可以使用多次,但是最后一定要使用end來結(jié)束響應(yīng),否則客戶端會(huì)一直等待(就是重啟服務(wù)器)
response.write("hello");
}
//結(jié)束響應(yīng),可以返回?cái)?shù)據(jù)給客戶端了
response.end();
});
//4.綁定端口號(hào),啟動(dòng)服務(wù)器
server.listen(3000,function () {
//回調(diào)函數(shù)
console.log("服務(wù)器啟動(dòng)成功");
});
// control + c 關(guān)閉服務(wù)
//IP地址 和 端口號(hào)
// ip地址用來定位計(jì)算機(jī)
// 端口號(hào)用來定位具體的應(yīng)用程序
//所有的通信軟件都會(huì)占用一個(gè)端口號(hào)
// 端口號(hào)的范圍 0-65536
-
發(fā)送請(qǐng)求
http服務(wù).png -
響應(yīng)
server響應(yīng).png
不同模塊之間的通信
- 在node中 沒有全局作用域 只有模塊作用域(文件作用域,2個(gè)文件之間的相同變量不相互影響)
- 外部訪問不到內(nèi)部
-
內(nèi)部也訪問不到外部
模塊作用域
- 既然是模塊作用域,那如何怎么模塊和模塊之間進(jìn)行通信 ?
-
導(dǎo)出和加載 模塊之間的通信
image.png



