node.js簡介

簡介

node.js是瀏覽器的js引擎。html

瀏覽器中有一個js引擎用來解析js代碼,只能解析js代碼中的ECMAScript,dom和bom的解析依賴的是瀏覽器自己。node

將這個js引擎單獨拿出來,就是node了。後端

要讓這個引擎運行起來,有人將他作成了一個軟件,安裝在電腦上,js代碼就不用依賴瀏覽器運行了,在電腦的命令行也能運行js代碼。瀏覽器

爲何要這麼作?由於這樣的話,js就能寫後臺了。服務器

官網:https://nodejs.org/en/dom

中文網:http://nodejs.cn/異步

 

簡單的命令

盤符: # 進入某個盤符
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中,模塊分三種:

  1. 內置模塊,node系統自帶的一些文件模塊

  2. 自定義模塊,本身的一些文件

  3. 第三方模塊,雷鋒寫好的,下載來使用

fs模塊

這個模塊主要用來操做文件:讀取、寫入文件。

node系統自帶的,直接引入進來使用。

const fs = require("fs");

寫入文件

異步寫入

fs.writeFile(被寫入的文件,寫入的內容,寫入完成後執行的回調函數); // 這個操做是異步的

使用說明:

  1. 文件存在則寫入,文件不存在則建立文件寫入。

  2. 文件中沒內容就直接寫,有內容會覆蓋寫入。

例:

const fs = require("fs");
fs.writeFile("./test.txt","hello node",function(){
    console.log("寫入完成!");
});
console.log(123);

執行結果:

異步寫入結果
 

同步寫入

fs.writeFileSync(被寫入的文件,寫入的內容); // 這個操做是同步的

執行結果:

同步寫入結果
 

讀取文件

異步讀取

fs.readFile(要讀取的文件,[讀取文件編碼方式],讀取成功後執行的回調函數);

使用說明:

  1. 可選項參數是讀取文件使用的編碼方式,能夠寫utf-8

  2. 回調函數中須要兩個參數,參數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);

讀取結果:

同步讀取文件結果
 

http模塊

node作後端,沒有現成的服務器,須要使用http這個模塊。

引入模塊:

const http = require("http");

利用這個模塊作服務器:

// 建立服務器,返回這個服務的名稱
http.createServer(function(){
    // 處理客戶端的請求
    console.log("有請求");
});
// 監聽端口
http.listen(9988);

啓動文件,服務器就啓動了,一直是阻塞狀態,等待客戶端的請求進來:

啓動服務器結果
 

建立服務器的回調函數有兩個參數:參數1是請求的信息,參數2是響應信息:

http.createServer(function(request,response){
    // 處理客戶端的請求
    console.log(request);
    response.end("你的請求成功");
});

request中包含全部請求的信息,請求行,請求頭,請求空行,請求主體,以下圖:

請求信息
 

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("服務器啓動成功");
});
相關文章
相關標籤/搜索