nodeJS簡單介紹及使用nodeJS操縱數據庫

NodeJS的基本概念

NodeJS是什么?

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

Node.js? is a JavaScript runtime built on
Chrome's V8 JavaScript engine. Node.js uses
an event-driven, non-blocking I/O model that
makes it lightweight and efficient. Node.js'
package ecosystem, npm, is the largest
ecosystem of open source libraries in the
world.`

js能做什么事?
js ---> 瀏覽器中運行(面向過程--->面向對象)
js ---> 后臺開發

NodeJS就是使用js代碼,來做后臺開發

使用NodeJS可以開啟一個Web服務,給瀏覽器提供數據去
展示,并且接收瀏覽器提交過來的用戶產生的數據,存儲
到數據庫中,方便后面使用。

NodeJS能做什么?

1、提供數據給瀏覽器展示
2、保存用戶提交過來的數據
3、數據統計與分析

前端開發者為什么要學習nodeJS

1、要和后臺打交道,明白后臺提供給我們的數據是經過哪幾
2、以后在開發過程中方便調試
3、邁向全棧工程師的開始
4、搭建個人網站


Node服務器軟件的安裝與配置

Node.exe的安裝

下載nodeJS,安裝

檢測是否安裝成功 node -v

另外一種安裝我們node的方式
使用nvm這個軟件來安裝
node version manger,如果你想同時安裝多個node版本
教程:http://www.lxweimin.com/p/07c3456e875a

步驟:
1、安裝nvm這個軟件:
https://github.com/coreybutler/nvm-windows/releases

2、使用上面裝好的nvm軟件,安裝我們需要的node版本了
指令:
nvm install 具體的版本號就行了
nvm uninstall 具體的版本號
nvm list 查看當前安裝了哪些版本
nvm use 具體版本號,切換到某個版本

建議:
安裝一個高一點的穩定的版本即可,因為軟件都是向下兼容


系統環境變量及其作用

系統環境變量

每個系統都會提供一種叫做環境變量的東西,用來簡化我們去
訪問某一個應用程序可執行文件(.exe)的操作

我們配置了環境變量能做到什么事呢?
在我們終端的任何一個目錄下,都可以訪問,配置在系統
環境變量里面的可執行文件

如何將一個軟件的可執行文件配置在我們的系統環境變量中?
步驟:
1、拷貝一個可執行文件所在的目錄,比如:
node.exe所在的目錄 C:\Program Files\nodejs

2、系統 > 高級系統設置 > 高級 > 環境變量 >
系統變量 > Path > 填寫上你的目錄

注意事項:
如果更改了系統的環境變量,就必須把終端重新啟動


啟動node.exe執行js代碼

啟動(相當于啟動Apache服務器)

1、在我們的node的安裝目錄下,去雙擊我們node.exe

2、在終端輸入 node即可 node.exe

退出我們的node.exe

1、在終端中輸入.exit
2、連續按住兩次 CTRL + C

怎么去執行js代碼

1、直接在我們啟動的node.exe中寫代碼(在開啟的REPL環境中寫代碼執行)
缺點:
書寫不方便,閱讀起來也不方便
因為在我們的cmd中寫的代碼,是放在內存中的,
一旦我們退出了node.exe,原先寫的代碼都沒有了

2、把我們寫好的代碼放在一個單獨的js文件中去執行

在終端中輸入 node.exe +執行的文件名稱

注意:
1、我們js代碼不是在終端中運行的,只是借助終端
去啟動我們node.exe,并且最終將結果展現在終端里面而已

2、在運行時候,首先你的終端的目錄得切換到你要
執行的文件的目錄下面去,然后使用node 文件名稱執行即可
我們nodejs的代碼是在一個叫做REPL環境中,執行的


REPL

JS的執行

執行js在瀏覽器端,我是是要依靠瀏覽器(js的解析引擎)

在服務器端 nodejs開啟的REPL環境

官網的解釋:
參考:http://shouce.qdfuns.com/nodejs/repl.html

REPL就是當通過node.exe啟動之后開辟的一塊內存空間,
在這塊內容空間里面就可以解釋執行我們的js代碼

例如:
在終端中輸入了 node abc.js 做的事情就是,將abc.js中
寫好的js的邏輯代碼扔在啟動好的node的內容空間中去運行,
我們把啟動好的node的這塊內存空間稱之為REPL環境


模塊化思想

為什么前端需要有模塊化

1、解決全局變量名污染的問題
2、把相同功能的代碼放在一個模塊(一個js文件中)方便后期維護
3、便于復用

NodeJS中如何體現模塊化

1、Node本身是基于CommonJS規范,
參考:http://javascript.ruanyifeng.com/nodejs/module.html#toc0

2、Node作者在設計這門語言的時候,就嚴格按照CommonJS
的規范,將它的API設計成模塊化了,比如它將開啟Web服務這
個功能所有代碼都放入一個http模塊中

3、Node本質來說就是將相同功能的代碼放入到一個.js文件中管理

常用NodeJS中的模塊

模塊              作用
http              開啟一個Web服務,給瀏覽器提供服務
url            給瀏覽器發送請求用,還可以傳遞參數(GET)
querystring       處理瀏覽器通過GET/POST發送過來的參數
path              查找文件的路徑
fs              在服務器端讀取文件用的

上面五大核心模塊加上其它一些第三方的模塊,就可以完成基本的數據庫操作了

nodeJS核心模塊及其操作

http

使用http模塊開啟web服務
步驟:
    //1、導入我們需要的核心模塊(NodeJS提供的模塊我們稱之為核心模塊)
        var http = require('http');
    
    //2、利用獲取到的核心模塊的對象,創建一個server對象
        var server = http.createServer();

    //3、利用server對象監聽瀏覽器的請求,并且處理(請求-處理-響應)
        server.on('request',function(req,res){
             res.end("welcome");
          });

    //4、開啟web服務開始監聽
        server.listen(8080,'127.0.0.1',function(){
            console.log('開啟服務器成功');
          });

url

1、導入url這個核心模塊

2、調用url.parse(url字符串,true),如果是true的話代表把我們
的username=zhangsan&pwd=123 字符串解析成js對象

 // 使用url模塊獲取url中的一些相關信息
const url = require('url')
var testURL = http://127.0.0.1:8899/login?username=zhangsan&pwd=123 
console.log(url.parse(testURL,true))//{username:zhangsan,pwd:123}

QueryString

作用:
將GET/POST傳遞過來的參數,進行解析
GET : ?username=zhangsan&pwd=123
POST : username=zhangsan&pwd=123

使用:
    const querystring = require('querystring')
    
    const paramsObj = querystring.parse(鍵值對的字符串)

GET&POST

相同點:
都是HTTP協議的方法
都能傳遞參數給服務器

不同點:
1、傳參的方式不一樣
GET 放在路徑后面 ?開始,后面鍵值對
POST 放在請求體 鍵值對的方式

2、傳參的限制不一樣
GET 2048B
POST 2M

3、GET有緩存,POST沒有

4、GET傳參不安全,POST相對安全

建議:
如果只是單純的獲取數據,就用GET,因為GET有緩存效率高

如果是要向服務器提交數據,就用POST


fs&path

path

作用:獲取路徑

path.join(__dirname,'你要讀取的文件夾下面的文件名稱即可')

__dirname全局屬性,代表當前文件所在的文件夾路徑

path.join會自動判斷文件的路徑,并且給他加上`/`

fs

作用:讀取服務器硬盤上面的某一個文件(操作文件)

fs.readFile : 異步讀取服務器硬盤上面的某一個文件

fs:node去讀取服務器硬盤中的文件(操作文件)

path:獲取文件的路徑

上面兩個基本上配合起來用

自定義模塊

CommonJS規范認為,一個.js文件就可以看成一個模塊,如果我們想把模塊中定義的變量,方法,對象給外面的js使用,就必須使用CommonJS提供module將我們需要給外面用的東西,導出去

注意點

在commonjs中導入模塊用 require
在commonjs中在模塊中導出 使用module.exports
如果是自定義模塊,在導入自定義模塊的時候,得把路徑寫完整
require導入的東西,就是別的文件modulu.exports導出的東西


Express 框架

基本概念

它是對HTTP封裝,用來簡化我們網絡功能那一塊

官網:http://www.expressjs.com.cn/
官方解釋:
基于 Node.js 平臺,快速、開放、極簡的 web 開發框架。

重點

1、如何去接收GET/POST傳遞過來的參數
2、如何通過Express進行分門別類的處理路由
3、靜態資源的處理

使用

1、Hello World 案例

步驟:
1、導入包
2、創建一個app
3、請求處理響應
4、開啟web服務,開始監聽

2、獲取GET/POST參數
GET參數:登錄 http://127.0.0.1:3000/login?username=zhangsan&pwd=123

可以直接在我們的req.query中就可以獲取了

POST參數:因為express沒有直接提供獲取POST參數的方法,需要借助一個第三方包 body-parser
參考:
https://www.npmjs.com/package/body-parser

步驟:
1、npm install body-parser --save
2、導包
3、實現某些方法

最后通過req.body即可以獲取到post提交過來的參數

路由處理

前端路由:
作用:當觸發了某個超鏈接之后,根據路由的配置,決定
跳轉到哪個頁面,最終將這個頁面呈現出來

后臺的路由
作用:就是用來分門別類的出路用戶發送過來的請求

    http://127.0.0.1:3000/login
    http://127.0.0.1:3000/register
    
    http://127.0.0.1:3000/getGoodsList
    http://127.0.0.1:3000/getGoodsInfo
    
    jd購物
    男士:(專門創建一個man.js文件來實現男士區域商品的請求)
        http://www.jd.com/man/xz
        http://www.jd.com/man/ld
        http://www.jd.com/man/px
        
    女士:(專門創建一個girl.js文件來實現女士區域商品的請求)
        http://www.jd.com/girl/xs
        http://www.jd.com/girl/bag
        http://www.jd.com/girl/kh

express中代碼實現?

步驟:
1、先要創建一個單獨的路由(js文件),來處理某一類
請求下面的所有用戶請求,并且需要導出去
1.1 導入包 express
1.2 創建一個路由對象
const manRouter = express.Router()
1.3 在具體的路由js中處理屬于我們該文件的路由
manRouter.get(xxx)
manRouter.post(xxx)
1.4 將上面創建的路由對象導出去,在入口文件中使用

2、在入口文件中,導入我們的路由文件,并且使用就可以了

//導入路由文件
const manRouter = require(path.join(__dirname,"man/manRouter.js"))
//在入口文件中使用
app.use('/man',manRouter)
                ```
                
## Express中靜態資源的處理
Express希望對我們后臺靜態資源處理,達到簡單的目的,
    然后只希望我們程序員寫一句話就能搞定
    
步驟:
        1、在我們入口文件中設置靜態資源的根目錄
            注意點:一定要在路由處理之前設置

app.use(express.static(path.join(__dirname,'statics')))
```

2、在我們的頁面中,按照我們Express的規則來請求后臺
靜態資源數據
寫link的href,script的src寫的時候,除開靜態資源根
路徑之外,按照他在服務器上面的路徑規則寫


mongodb數據庫

數據庫

保存數據的倉庫,數據庫本質也是一個文件,只是說和普通的
文件不太一樣,他有自己的存儲規則,讓我們保存數據和查詢
數據更加方便

存儲文件的介質

localStorage 文本文件
大型數據或是海量數據的時候必須要用到數據庫

數據庫的分類

客戶端:
iOS/Android/前端
iOS/Android SQLite 在iOS/Android存儲App的數據

服務端:
關系型數據庫
部門---員工
mysql
sqlserver
oracle

非關系型數據庫
JSON對象的形式來存儲

MongoDB : 簡單,你會js、JSON就能操作
Redis
Memcached

數據庫的作用

1、保存應用程序產生的數據(用戶注冊數據,用戶的個人信息等等)
2、當應用程序需要數據的時候,提供給應用程序去展示


安裝mongodb服務端

步驟:
1、安裝mongodb服務端軟件
2、設置mongodb的環境變量,重啟終端驗證 mongo -version
3、建立一個文件夾,用來存儲mongodb數據庫產生的數
據(建議放在C盤根目錄 mongodb_datas)
4、啟動
mongod --dbpath c:/mongodb_datas

啟動服務端有幾種方式

1、方式一,直接在cmd中輸入 mongod --dbpath c:/mongodb_datas
32位: mongod --dbpath c:/mongodb_datas --journal --storageEngine=mmapv1

2、方式二,可以把mongod --dbpath c:/mongodb_datas做成一個批處理文件
32位: mongod --dbpath c:/mongodb_datas --journal --storageEngine=mmapv1

使用robomongo這個小機器人來操作我們的數據庫中的數據

步驟:
1、連接到我們mongodb數據庫服務端,并且連接成功之
后,服務端會給我們返回一個操作數據庫的db對象

2、拿著上一步返回的db對象,對mongodb數據庫中的數據進行操作了

連接成功之后,我們要來操作數據的話
1、創建一個數據庫 (相當于在excel中創建空白工作簿)
2、創建集合 (相當于在excel創建工作表單)
數據的一個集合,把相關聯的數據放在一個集合中
3、確立表頭,插入數據、刪除數據、修改數據、查詢數據

MongoDB數據庫中的概念

數據庫 : 一個App中對應一個數據庫

集合:相當于Excel中表單,一堆數據的集合,相關聯的數據,
會放在一個集合中

文檔:相當于excel中的每一行數據

一個數據中可以有多個集合(學生集合、食品集合)
一個集合可以有多條文檔(多條數據)

在NodeJS中使用mongodb這個第三方包來操作我們mongodb數據庫中的數據

參考:
https://www.npmjs.com/package/mongodb

前提準備:
1、使用npm i mongodb --save來安裝

正式集成:
1、導入包
2、拿到我們mongoClient對象
3、使用mongoClient連接到mongodb的服務端,返回操作數據庫的db對象
4、通過db對象,拿到數據集合

db.collection('集合的名稱')
            ```
5、調用集合的增,刪,改,查的方法,來操作數據庫中的數據
            

------------------------------------------
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,967評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,273評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,870評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,742評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,527評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,010評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,108評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,250評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,769評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,656評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,853評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,371評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,103評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,472評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,717評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,487評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,815評論 2 372

推薦閱讀更多精彩內容