express框架
產(chǎn)生的原因:
1.http模塊在處理路由這塊比較雞肋
2.http模塊在處理靜態(tài)資源時比較麻煩
3.http在獲取瀏覽器的提交過來的參數(shù)時很麻煩
4.express能解決url中有中文時,express能自動解碼
基本概念:
express是nodejs發(fā)送網(wǎng)絡(luò)請求的第三方框架,是NodeJS中一個優(yōu)秀的 web 解決方案
地址:
https://www.npmjs.com/package/express
https://github.com/expressjs/express
安裝:
npm i/install express --save
express使用步驟
利用express開啟web服務(wù)器的步驟:
1、在當(dāng)前項目中使用 npm i/install express --save
2、導(dǎo)入express包
3、利用express對象創(chuàng)建一個application對象 app
4、在app對象上就有一系列方法(get,post)還可以可以分別設(shè)置請求路由
5、利用app.listen()監(jiān)聽端口
GET方法獲取參數(shù):
直接從 req.query中就可以獲取,非常簡單
POST方法獲取參數(shù):
使用一個第三方包 body-parser
express的路由
/man/xz
/man/ld
/woman/qz
/woman/sw
如何使用:
1.將某一類路由規(guī)則放入到一個js文件中,寫好相應(yīng)的代碼,并且暴露出去
const express = require('express');
let route = express.Router(); //創(chuàng)建一個路由
路由的處理...
module.exports = route; //將創(chuàng)建的路由對象暴露出去
2.在啟動服務(wù)器的js文件中,導(dǎo)入對應(yīng)的路由,并且調(diào)用app.use方法使用即可
const route = require('路由的路徑');
app.use('路由規(guī)則',route); //哪些路由規(guī)則適用于該路由
開發(fā)注意事項:
設(shè)置路由一定要寫在入口文件的代碼后面一些,最好寫在app.listen(xx) 的前一行即可;
express之next方法
使用方式:(有兩種)
第一種:連寫方式,用得比較少
app.get('/',(req,res,next)=>{
res.write('1.0 ');
next();
},(req,res,next)=>{
res.write('2.0 ');
next();
},(req,res)=>{
res.end('3.0 end');
});
第二種:分開寫,用得比較多
app.get('/',(req,res,next)=>{
res.write('1.0');
//觸發(fā)下一個同樣的路由的回調(diào)函數(shù)
next('route');
});
app.get('/',(req,res)=>{
res.end('2.0');
});
調(diào)用的過程分析:
當(dāng)瀏覽器請求 http://127.0.0.1:8888/
觸發(fā)第一個回調(diào)函數(shù),當(dāng)在第一個回調(diào)函數(shù)中手工執(zhí)行next()的時候
就會觸發(fā)第二個回調(diào)函數(shù),一直下去直到最后一個回調(diào)函數(shù)被執(zhí)行,那么最后
這個回調(diào)函數(shù)可以不用寫next參數(shù)
使用注意:
觸發(fā)下一個同樣的路由的回調(diào)函數(shù),路由必須一致
express之通配符方法(all)與next方法聯(lián)合起來做權(quán)限驗證
使用方式:
app.all('路由',(req,res,next)=>{
if(登錄過){
next(); //繼續(xù)往下執(zhí)行真正的請求
}else{
res.end("請登錄"); //提示用戶登錄
}
});
注意點:
app.all(xxx); 一定要在所有路由的最前面
express靜態(tài)資源處理
使用方式:
app.use(express.static('靜態(tài)資源路徑'));
訪問時的注意點:
如果瀏覽器要訪問statics下面的site.css
url應(yīng)該是 http://127.0.0.1:8888/site.css
如果是http://127.0.0.1:8888/statics/site.css 反而報錯
如果是statics下面的字母中的靜態(tài)資源,則一定要在url中加上子目錄
注意點:
設(shè)置在路由或是app.use(路由),之前
要在兩個地方寫,一個是html里面,還有一個地方是入口的js文件
MongoDB
數(shù)據(jù)庫概念
數(shù)據(jù)庫:數(shù)據(jù)存儲的倉庫
數(shù)據(jù)庫就是為我們方便的管理數(shù)據(jù)的一個平臺,例如對數(shù)據(jù)的存儲、修改、查詢等都非常的方便。
數(shù)據(jù)庫分類
數(shù)據(jù)庫產(chǎn)品有很多,以下是一些常見的數(shù)據(jù)庫產(chǎn)品:
- MySQL
- Oracle
- DB2
- SqlServer
- MongoDB
- etc.
數(shù)據(jù)庫沒有排名之分,各有各的應(yīng)用場景,這里學(xué)習(xí)的是 MongoDB 數(shù)據(jù)庫。
MongoDB 數(shù)據(jù)庫
為了更好的學(xué)習(xí) MongoDB 數(shù)據(jù)庫,大家可以參考菜鳥教程上的 MongoDB 數(shù)據(jù)庫教程文檔,
鏈接地址:http://www.runoob.com/mongodb/mongodb-tutorial.html
mongodb數(shù)據(jù)庫官網(wǎng):https://www.mongodb.com/
下載地址:https://www.mongodb.com/download-center?jmp=nav
選擇好對應(yīng)的版本下載即可
為什么選擇MongoDB?
理由:
1.只要會js/json就會mongodb(學(xué)習(xí)成本低)
2.mongodb對js的兼容性最好
3.mongodb存數(shù)據(jù)就是存JSON
安裝與配置 MongoDB 數(shù)據(jù)庫環(huán)境
詳情見視頻:
怎么驗證安裝成功:
在cmd終端中輸入: mongo --version 或是 mongod --version ,能看到版本好,說明安裝成功
如果終端中輸入 mongo --version 提示找不到命令,一定要看看是不是沒有配置mongodb的環(huán)境變量,并且配置環(huán)境變量之后一定要記得重啟cmd
window7安裝MongoDB存在的問題
建議:升級到window10
解決步驟:
1.將你的操作系統(tǒng)升級到window7最新版
2.安裝 vc_redist.x64.exe
3.如果你的電腦是32位的,再安裝32位的mongodb軟件 mongodb-win32-i386-3.2.11-signed.msi
MongoDB 數(shù)據(jù)庫存儲結(jié)構(gòu)
[圖片上傳失敗...(image-d75d13-1513870122297)]
和Excel對比一下即可明白:
Excel MongoDB
創(chuàng)建工作簿 創(chuàng)建數(shù)據(jù)庫
創(chuàng)建一個sheet(工作表單) 創(chuàng)建集合
確立表頭,插入數(shù)據(jù) 插入文檔(確立表頭)
核心思想:
1.分門別類的存儲數(shù)據(jù)
2.mongodb是以`集合`的概念來區(qū)分不同數(shù)據(jù)的,比如用戶集合,商品集合,訂單集合等等,不同的數(shù)據(jù)要放在不同的集合中去統(tǒng)一管理
3.集合里面存儲的可以認(rèn)為是一個數(shù)組
4.數(shù)組中的每一個對象,可以認(rèn)為就是JSON對象,在mongodb中我們稱之為 `文檔`
5.文檔的結(jié)構(gòu)可以隨意,但是必須統(tǒng)一,也就是說,同一個集合中,所有的文檔一定要遵守相同的數(shù)據(jù)結(jié)構(gòu)
其他:
`集合`的作用就是用來隔離數(shù)據(jù),分門別類的存儲數(shù)據(jù)
操作MongoDB的步驟
1.創(chuàng)建數(shù)據(jù)庫中數(shù)據(jù)的存儲目錄
2.啟動MongoDB的服務(wù)實例
3.創(chuàng)建數(shù)據(jù)庫
4.創(chuàng)建集合
5.創(chuàng)建文檔
MongoDB使用之前必做步驟1--創(chuàng)建數(shù)據(jù)目錄(必須)
我們在安裝完成MongoDB后需要創(chuàng)建一個存放數(shù)據(jù)的目錄。請注意,數(shù)據(jù)目錄應(yīng)該放在根目錄下((如: C:\ 或者 D:\ 等 ),數(shù)據(jù)目錄的命名隨意,比如我就命名 mongodb_datas
MongoDB使用之前必做步驟2--啟動服務(wù)器(必須)
啟動MongoDB服務(wù)器的方式一:通過終端指令去啟動
1.首先在終端切換到你的MongoDB的安裝目錄的bin目錄下(當(dāng)然如果配置了環(huán)境變量在哪個目錄下都可以了)
2.在終端執(zhí)行: mongod.exe --dbpath c:/mongodb_datas ,如果成功啟動就表示一切都OK了
注意點:
1.32 位版本使用下面的命令啟動數(shù)據(jù)服務(wù):
```
mongod --dbpath 數(shù)據(jù)存儲路徑 --journal --storageEngine=mmapv1
```
2.執(zhí)行完上面的命令并成功開啟 MongoDB 數(shù)據(jù)服務(wù)實例之后,就把該控制臺最小化到一邊就可以了,
千萬不要關(guān)閉,否則無法連接,如果對數(shù)據(jù)庫的操作結(jié)束,可以打開該控制臺通過 `Ctrl + C` 關(guān)閉。
啟動MongoDB服務(wù)器的方式二:方式一的延續(xù),把上面的指令做成一個批處理文件.bat
啟動MongoDB服務(wù)器的方式三:將MongoDB服務(wù)器作為Windows服務(wù)運行
請注意,你必須有管理權(quán)限才能運行下面的命令。執(zhí)行以下命令將MongoDB服務(wù)器作為Windows服務(wù)運行:
例子:
mongod.exe --bind_ip 127.0.0.1 --logpath "C:/mongodb_datas/server_log/mongodb.log" --logappend --dbpath "c:/mongodb_datas" --port 27017 --serviceName "MongoDBServer" --serviceDisplayName "MongoDBServerDisplayName" --install
補(bǔ)充:從Windows服務(wù)中卸載 MongoDB服務(wù)
1.先停止要刪除的服務(wù)(比如MongoDBServer)
2.以管理員身份運行cmd,在cmd中輸入: sc delete 服務(wù)名稱(比如MongoDBServer)
注意點:
1.mongodb.log 這個日志文件一定要先創(chuàng)建好,才能執(zhí)行指令
2.必須要以管理員的身份打開cmd窗口,并運行
如何連接到MongoDB服務(wù)器并且操作它?
注意:在進(jìn)行連接之前請確保你的服務(wù)實例是開啟狀態(tài)的(不要關(guān)閉剛才開啟的數(shù)據(jù)服務(wù)實例)。
可以使用兩種方式來連接到MongoDB服務(wù)器并且操作它
連接方式1:使用MongoDB自帶的MongoDB后臺管理 Shell
在終端中輸入 mongo 或是 mongo --host 127.0.0.1 --port 27017
mongo 命令默認(rèn)去連接本機(jī)上的 MongoDB 服務(wù)實例:`127.0.0.1:27017`,可以通過下面的命令
指定連接的主機(jī)名和端口號:
```
mongo --host 127.0.0.1 --port 27017
```
如果看到類似于如下的字樣說明連接成功:
```
MongoDB shell version v3.4.2
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.2
Server has startup warnings:
2017-01-18T18:49:53.865+0800 I CONTROL [initandlisten]
2017-01-18T18:49:53.865+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-01-18T18:49:53.866+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2017-01-18T18:49:53.866+0800 I CONTROL [initandlisten]
>
```
如果提示 “無法連接主機(jī)”,請檢查你的 MongoDB 數(shù)據(jù)服務(wù)實例是否開啟。
操作方式1:在終端中使用mongodb的指令進(jìn)行操作
常見指令:
見下一個知識點
連接及操作方式2:使用圖形化客戶端工具:
robomongo(跨平臺) : https://robomongo.org/download
基本操作命令
可以參考:
http://www.yiibai.com/mongodb/mongodb_create_collection.html
http://www.runoob.com/mongodb/mongodb-tutorial.html
-
show dbs- 查看當(dāng)前服務(wù)實例上所有的數(shù)據(jù)庫
-
use 數(shù)據(jù)庫名稱- 如果數(shù)據(jù)庫不存在,則創(chuàng)建數(shù)據(jù)庫,否則切換到指定數(shù)據(jù)庫。
-
db.dropDatabase()- 刪除數(shù)據(jù)庫,注意,要在切換的數(shù)據(jù)庫中刪除
-
db- 查看當(dāng)前所處的數(shù)據(jù)庫
-
show collections- 查看當(dāng)前數(shù)據(jù)庫中所有的集合
-
db.createCollection("集合名稱")- 創(chuàng)建集合
-
db.集合名稱.drop()- 刪除集合
-
db.集合名稱.insert({數(shù)據(jù)文檔})- 插入的每一條文檔會自動幫我們生成一個
_id字段,它是mongodb自動維護(hù)的,不需要我們關(guān)心
- 插入的每一條文檔會自動幫我們生成一個
-
db.集合名稱.find()- 查詢指定集合中所有的數(shù)據(jù)
- 可以通過
db.集合名稱.find().pretty()美化輸出格式 - 默認(rèn)是查詢所有,可以通過:
db.集合名稱.find({查詢條件})按條件查詢集合中的數(shù)據(jù) - 模糊查詢的條件 {要查詢的字段:{$regex: '關(guān)鍵字'}}
-
db.集合名稱.update({更新條件}, {要更新的字段})- 更新指定集合數(shù)據(jù),注意點,要更新的字段一定要這樣寫 {$set:{字段的名稱:字段的值}},
-
db.集合名稱.update({更新條件}, {要更新的字段},{multi:true})- 更新多條文檔,{multi:true}默認(rèn)是false
-
db.集合名稱.remove({刪除條件})- 刪除指定集合中的數(shù)據(jù)
-
db.集合名稱.remove({刪除條件},{multi:true})- 刪除多條文檔,{multi:true}默認(rèn)是false
exit退出當(dāng)前操作-
cls清屏注意點:更新和刪除時一般都需要帶條件,除非是全部更新與全部刪除,不過全部更新與全部刪除這樣很危險,實際操作過程中很少
使用 Node 操作 MongoDB
安裝 MongoDB 官方提供的驅(qū)動包:
npm install --save mongodb
具體操作方式請參考官方文檔:https://www.npmjs.com/package/mongodb