nodejs----(1)

什麼是:不是JS,是一種軟件開發平臺,它的競爭對象JSP/PHP/ASP.NET,歷史第一次有一種語言可以通吃前後端.

 


Node運行的兩種方式:

1.交互模塊---簡單瞭解(測試新功能)

   REPL:輸入一行代碼執行一行

   注意:交互模自帶輸出功能,不必一定要 console.log()

   node 回  進入交互模式

   .exit        退出

 2.腳本模塊—正式項目中使用

      把要執行所有語句編寫一個文本文件中(後綴任意,沒有),一次性提交node解析器執行.

      node 完整路徑/x.js 回車

      提交:只要安裝成node.js,重啓webstorm,ws可以自動發現node.exe解析,新的項目和文件編寫一定UTF-8

建議:所有目錄名稱,不要有中文,不要有空格


數據類型:(nodejs  vs  js)

nodejs js

(1) 基本/原生/值類型

  string/number/boolean/null/undefined

(2)引用類型

   ES對象類型:Error/Data/Math/Array/RegExp/Object/....

   用戶自定義對象類型:{}

   Node.JS 第三方對象:十萬多 https://www.npmjs.com/

 

(1)基本/原生/值類型

    string/number/boolean/null/undefined

(2)引用類型

    ES對象類:Error/Data/Math/Array/RegExp/Object/....

  BOM:window;docuemnt,location,event,screen,....

  DOM:Element,Attribute,.....

  用戶自定義對象類型:{}


模塊概念:

一個項目中多個”模塊”,訂單模塊,用戶模塊,支付模塊....

         node.js按照功能,可以把函數,對象分別保存不同文件或目錄下,這些目錄和文件在node.js稱爲一個“模塊”

        ##注意:Node.JS每個一個模塊都是一個獨立構造函數

         Node.JS解析器自動爲每一個.js文件添加如下代碼.

        (function(exports,require,module,__filename,__dirname){

             exports:{} 於聲明向部導出自

             require:fn 用於導入其它的模塊,且創建定模塊對象

             module: 當前模塊對象

             __filename

             __dirname

             var i = 10;

             var j = 11;

             console.log(i+j);

});

每個模塊都可以使用自己require();引入另一個模塊—底層本質是創建指定模塊一個對象實例.


自定義模塊的兩種形式:

(1)文件模塊

      創建一個JS文件,如m3.js,導出其公開數據,

      其它模塊可以require("./m3");引入

(2)目錄模塊

       方式一:創建一個目錄,假設m4,其中創建index.js文件,導

              出需要公開數據。其它模塊引入

              var m = require(“./m4”);

       方式二:創建一個目錄,假設m5,其中創建5.js文件,導出需要

              公開數據數據,創建package.json文件 main指定啓動

              文件 5.js 其它模塊引入

              var m = require(“./m5”);

       式三:創建一個目錄,必須名爲 node_modules 

       ,其中再創建目錄模塊,假設 m6 其中創建 package.json

       文件,其中聲明 main屬性指定默認執行啓動js,如6.js,

       其中導出需要公共數據,其它模塊引入

       require(“m6”);


原生模塊的使用(解析引擎自帶)

1.Buffer(緩衝區)

 

                Buffer:緩衝區,本質上是一塊內存區域,用於暫存以後要用到數據

                (數字,字符串,二進制圖片/音頻/視頻),該區域稱爲“緩存”

                

#分配置一個指定大小緩衝區  1024字節

建議:緩衝區大小不超過 512KB   512*1024

    var buff1 = Buffer.alloc(1024);

#使用一個數組創建緩衝區

    var buff2 = Buffer.from([1,2,3]);

#使用一個字符串創建緩衝區

var buff4 = Buffer.from(“abc”);

#將一個緩衝區內容轉換字符串{如果緩衝區數據是字符串}

var str = buff4.toString();

2.QueryString

   querystring模塊用於處理HTTP請求URL中查詢字符串

     var obj = qs.parse(str);   把查詢字符串解析js對象

     var str = qs.stringify(obj) 把js對象轉換爲查詢字符串

3.URL

  url模塊用於解析一個HTTP請求地址,獲取其中各個部分

   var obj = url.parse(str);    把一個URL地址爲js對象

   var obj = url.parse(str,true); 功能同上,並且把其中查詢字符串轉換

4.fs

文件:在node.js 我們系統文件或者目錄統稱爲文件

   fs 模塊提供對文件和目錄進行,增刪改查,讀定文件內容

1.同步讀寫文件(阻塞)

#同步讀取文件內容 var data = fs.readFileSync(fileName);

#同步向文件寫內容 fs.writeFileSync(fileName,data);

 注意:(1)如果當前寫入文件並不存在,自動創建一個

      a.txt

      (2)如果當前寫入目錄並不存在,報錯

      d:/abc/a.txt

      (3)如果當前文件己經存在內容,清空

#同步向文件追加內容

fs.appendFileSync(fileName,data);

2.異步讀寫文件(非阻塞)

#異步讀取數據  fs.readFile(fileName,function(err,data){ });

               函數:文件讀取完成後調用

               err:讀取文件不存在,權限不足,

               自動創建錯誤對象 

         #異步寫數據    fs.writeFile(fileName,data,function(err){})

                        函數:文件寫結束調用

         #異步追加數據  fs.appendFile(fileName,data,function(err){})

                        函數:文件追加結束

5.http

 HTTP 模塊可用於編寫基於HTTP協議客戶端程序(即瀏覽器),也可以編寫一個基於HTTP協議服務器(APACHE)

用http模塊編寫一個web服務器

    (1)創建服務器對象        var server  = http.createServer();

    (2)綁定監聽端口 1-65535  server.listen(3000);

    (3)接收客戶端請求,      server.on(“request”,(req,res)=>{..})

    (4)並且響應客戶消息      res.end(str...);

    

req:請求對象:保存客戶端請求消息

req.url 請求url地址

 res:響應對象:服務器發送數據客戶端,修改響應格式

 

三個常用對象:

1.server 代表服務器對象

2.req    (request)請求對象,保存客戶端很多信息

req.url         客戶請求地址

req.method    客戶請求方式

req.httpVersion HTTP版本

req.headers     請求頭

3.res    (response)響應對象,保存服務器端向客戶發送數據

res.statusCode = 200;

res.setHeader(); 設置響應頭

res.write();     向客戶端輸入響應消息主體

res.end();      通知客戶端,響應消息結束(只能一次)

   常見錯誤:程序端口被佔用

   listen EADDRINUSE :::3000

   解決:查找前面程序停止即可

 

6.第三方模塊 (mysql/express)

mysql模塊:

SQL語句的分類

DDL:數據定義語句  CREATE/DROP/ALTER…

DCL:數據控制語句  GRANT…

DML:操作操作語句 INSERT/UPDATE/DELETE

DQL:查詢語句     SELECT

使用node.js訪問mysql服務器:使用工具 npm 下載第三方模塊(npm i mysql)

mysql模塊使用步驟:

(1)下載模塊

  (2)加載mysql模塊                                         const mysql = require(“mysql”);

  (3)創建到數據庫服務器連接                         var conn = mysql.createConnection({})

(4)發送sql語句並且獲取服務器返回結果       conn.query(sql,(err,result)=>{});

  (5)關閉連接                                                      conn.end();

express模塊:

使用官方提供HTTP模塊可以創建一個web服務器應用,但此模塊非常底層,要處理各種情形,比較繁瑣。推薦使用HTTP高層模                    塊,express—第三方模塊,是一個基於node.js http模塊的高層模塊,服務器端開發。

使用步驟:

  1. 下載模塊 npm i express
  2. 加載相應模塊  http/express
  3. 創建express對象,再創建服務器對象,並且綁定監聽端口

var app = express();

var server = http.createServer(app);

server.listen(3000)

常規語法規則:

app.get(請求地址,回調函數);

#接收客戶請求 GET /index.html

app.get(“/index.html”,(req,res)=>{});

#接收客戶請求 POST /index.html

app.post(“/index.html”,(req,res)=>{});

 

1:express req和res對象

res.sendFile(__dirname+文件絕對路徑); =fs.read+res.write+res.end

res.send(向客戶端返回html字符串響應);

res.json(obj); =setHead()+JSON.parse()+res.write()+res.end()

2:express GET 請求 接收參數二種方法

  #GET /login.do?uid=10&uname=tom

  app.get(“/login.do”,(req,res)=>{

    //express爲每一個req對象添加屬性query

    req.query.uid;

    req.query.uname;

});

#GET /login.do/12/tom

app.get(“/login.do/:uid/:uname”,(req,res)=>{

  //express 爲每個req對象添加一個params 屬性

  req.params.uid

  req.params.uname

});

3:爲了項目提高效率à創建連接池

  (1)創建連接池

var pool = mysql.createPool({…}); host;user;password;

connectionLimit:5   連接池中活動連接5個

建議範圍:5~25

(2)所有應用程序 租連接

   pool.getConnection((err,conn)=>{   });

(3)歸還連接  conn.release();

4:請求方式:HTTP協議

      請求方法:用於標識此次請求的目的

      GET    表示客戶端想”獲得”指定資源

      POST   表示客戶端想”上傳/添加”指定數據給服務器,請求數據在請求主體中

      PUT    表示客戶端想”放置”數據在服務器

      DELETE 表示客戶端想”刪除”服務器上指定資源

   5:發送請求

     瀏覽器發送GET請求

       地址欄輸入url回車/表單GET/AJAX GET/超鏈接/js跳轉/img src

     瀏覽器發送POST請求

       表單POST/AJAX POST

     瀏覽器發送DELETE請求

       AJAX-DELETE

     瀏覽器發送PUT請求

       AJAX-PUT

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章