node.js是瀏覽器的js引擎。html
瀏覽器中有一個js引擎用來解析js代碼,只能解析js代碼中的ECMAScript,dom和bom的解析依賴的是瀏覽器自己。node
將這個js引擎單獨拿出來,就是node了。後端
要讓這個引擎運行起來,有人將他作成了一個軟件,安裝在電腦上,js代碼就不用依賴瀏覽器運行了,在電腦的命令行也能運行js代碼。瀏覽器
爲何要這麼作?由於這樣的話,js就能寫後臺了。服務器
官網:https://nodejs.org/en/dom
中文網:異步
盤符: # 進入某個盤符 cd 目錄 # 進入某個目錄 cd .. # 回到上一級目錄 dir # 查看當前文件夾中的文件和文件夾 tree # 查看當前文件夾中的全部文件和文件夾包括子文件夾及其文件,樹狀結構 cls # 清屏 ipconfig # 查看當前電腦的網管信息 systeminfo # 查看當前電腦的配置信息 md 文件夾名 # 新建文件夾 make dir directory rd 文件夾名 # 刪除文件夾 xcopy 文件夾 新文件夾名 # 複製文件夾,並起新的名字 type nul> 文件名 # 新建文件 copy 文件名 新文件名 # 複製文件,並起新的名字 echo 內容 > 文件名 # 給文件中寫入內容 move 文件路徑 新的路徑 # 將文件移動到新的路徑 ren 文件名 新的文件名 # 將文件重命名 del 文件名 # 刪除一個文件
在vscode中,自帶了命令行,能夠直接在編輯器中執行命令:編輯器
ctrl+` # 打開編輯器的命令行
或者: 在文件上右擊 「用命令打開」
模塊化
每一個人開發的功能都是一個單獨的文件,要將多個文件組合在一塊兒,須要將這多個文件導出,而後在一個最終的項目文件中導入。函數
每一個文件都有一個對象:module。這個對象中有一個屬性叫作exports,值也是一個對象,默認是一個空對象。當前文件默認導出的就是這個exports對象,導出的內容都寫在這個對象中。
module = { exports:{ name:"張三" } }
這個對象默認是存在的,因此不用從新賦值,直接添加內容便可。例:
module.exports.name = '張三';
module.exports.age = 20;
將另外一個文件中導出的內容接收起來。
var res = require(要導入的文件); // 返回值就是文件導出的內容:module.exports對象
在node中,模塊分三種:
內置模塊,node系統自帶的一些文件模塊
自定義模塊,本身的一些文件
第三方模塊,雷鋒寫好的,下載來使用
這個模塊主要用來操做文件:讀取、寫入文件。
node系統自帶的,直接引入進來使用。
const fs = require("fs");
寫入文件
異步寫入
fs.writeFile(被寫入的文件,寫入的內容,寫入完成後執行的回調函數); // 這個操做是異步的
文件存在則寫入,文件不存在則建立文件寫入。
文件中沒內容就直接寫,有內容會覆蓋寫入。
例:
const fs = require("fs"); fs.writeFile("./test.txt","hello node",function(){ console.log("寫入完成!"); }); console.log(123);
異步寫入結果 |
---|
同步寫入
fs.writeFileSync(被寫入的文件,寫入的內容); // 這個操做是同步的
同步寫入結果 |
---|
讀取文件
異步讀取
fs.readFile(要讀取的文件,[讀取文件編碼方式],讀取成功後執行的回調函數);
可選項參數是讀取文件使用的編碼方式,能夠寫utf-8
回調函數中須要兩個參數,參數1爲錯誤對象,讀取成功爲undefined,讀取失敗爲錯誤信息;參數2爲讀取的結果。若是沒有編碼方式,讀取的是一個buffer,使用16進制來描述二進制數據,須要轉爲字符串查看。
例:
var fs = require("fs"); /*fs.readFile("./a.txt",(err,data)=>{ if(err){ console.log("讀取失敗,錯誤爲:",err); return } console.log("讀取成功,數據爲:",data.toString()); });*/ fs.readFile("./a.txt","utf-8",(err,data)=>{ if(err){ console.log("讀取失敗,錯誤爲:",err); return } console.log("讀取成功,數據爲:",data); }); console.log(123);
異步讀取文件結果 |
---|
同步讀取
fs.readFileSync(要讀取的文件[,讀取文件的編碼]);
例:
var fs = require("fs"); /* var data = fs.readFileSync("./a.txt"); console.log("讀取成功,數據爲:",data); */ var data = fs.readFileSync("./a.txt","utf-8"); console.log("讀取成功,數據爲:",data); console.log(123);
同步讀取文件結果 |
---|
node作後端,沒有現成的服務器,須要使用http這個模塊。
引入模塊:
const http = require("http");
利用這個模塊作服務器:
// 建立服務器,返回這個服務的名稱 http.createServer(function(){ // 處理客戶端的請求 console.log("有請求"); }); // 監聽端口 http.listen(9988);
啓動文件,服務器就啓動了,一直是阻塞狀態,等待客戶端的請求進來:
啓動服務器結果 |
---|
http.createServer(function(request,response){ // 處理客戶端的請求 console.log(request); response.end("你的請求成功"); });
請求信息 |
---|
response是服務器給客戶端響應的信息,能夠本身設置,經常使用的屬性和方法:
res.write(data): 給瀏覽器發送請求體,能夠調用屢次,從而提供連續的請求體 res.end(); 通知服務器,全部響應頭和響應主體都已被髮送,即服務器將其視爲已完成。 res.end(data); 結束請求,而且響應一段內容,至關於res.write(data) + res.end() res.statusCode: 響應的的狀態碼 200 404 500 res.statusMessage: 響應的狀態信息, OK Not Found ,會根據statusCode自動設置。不能賦值中文 res.setHeader(name, value); 設置響應頭信息, 好比content-type res.writeHead(statusCode, statusMessage, options); 設置響應頭,同時能夠設置狀態碼和狀態信息
注意:必須先設置狀態碼,再設置響應頭,最後設置響應主體,順序不能亂。
例:
const http = require("http"); const server = http.createServer(); server.on("request",function(req,res){ // 設置狀態行和響應頭 // 語法:res.writeHead(狀態碼,狀態文本,{響應頭}); res.writeHead(404,'ccc',{'content-type':'text/html'}); res.end("ok"); }); server.listen(9988,function(){ console.log("服務器啓動成功"); });