Express 框架、模板,MongoDB數據庫

  
  今天跟你們分享的是Express框架、模板、MongoDB數據庫;我的以爲頗有用,但願能在你們作項目的的過程當中能有所幫助。
 
Express 模板
 
這是一個用戶量較大的一個Node框架,提供了一整套的Node模板,在裏面可使用EJS模板引擎..

基於 Node.js 平臺,快速、開放、極簡的 web 開發框架。(開發後端)

Express的性能對Node沒有影響,依然很高。
 
安裝方法:
 
1. 全局安裝express 和 express應用生成器
npm install express -g
npm install express-generator -g

  

2. 使用應用生成器去建立應用
-e 表明使用ejs模板引擎,不然會使用jade模板引擎
 cmd:   express project(項目名字) -e(使用ejs模板引擎)

  

3. 安裝依賴,進入到建立好的項目中安裝依賴
cd project
npm install

  

應用分析:
1. package.json

    body-parse:專門負責解析前端傳遞來的數據

    cookie-parser:解析請求頭中的cookie信息

    ejs:模板引擎編譯工具

    serve-favicon:專門處理相似於谷歌瀏覽主動請求favicon.ico文件的問題

2. bin/www 這個是和建立的服務相關的東西,能夠在這裏配置端口等等設置。

3. public:靜態資源文件夾,在這個文件夾裏的文件,在前端均可以直接訪問,不須要再在後端配置路由, /stylesheets/a.css

4. app.js:主應用文件,在這裏能夠設置路由、插件等等之類的東西,其實建立出來的就是requestListener

5. views:放入ejs模板,express會將ejs模板裝換成html文件

6. routes:裏面的全是路由文件,專門來處理不一樣的請求

  

模板引擎:
 
在前端開發過程當中,有不少模板引擎可使用,例如jade,ejs等等
 
使用模板引擎的優勢:

1. 能夠在模板引擎文件裏去寫一些邏輯性的代碼,用於服務端渲染,提升seo優化級別

2. 可使用便捷語法來開發html結構代碼(jade)。

什麼是ejs:

ejs是一個簡單高效的模板語言,經過數據和模板,能夠生成html標記文本,能夠說ejs是一個js庫,ejs能夠運行在客戶端和服務器端,客戶端安裝直接用引入文件便可,服務端要用npm包安裝

* ejs的特色:

* 快速編譯和渲染

* 簡單的模板標籤

* 自定義標記分隔符

* 支持文本包含

* 支持瀏覽器端和服務器端

* 模板靜態緩存

* 支持express視圖系統
 
 
服務端渲染:
 
其實前端開發須要作的事情,只有兩個:1. 建立界面結構 2. 數據交互 3. 渲染數據

數據交互其實又能夠分紅兩種:1. 給後端數據 2. 從後端拿數據

數據交互的目的是什麼?取:將數據渲染到dom文檔中 給:提交數據到後臺後,後臺會繼續返回咱們一個數據,拿到這個數據,依然仍是須要渲染

數據渲染方式分爲兩種:
 
1. 客戶端渲染(瀏覽器渲染):前端js經過ajax等數據交互技術,獲取到數據後經過操做dom來進行數據的渲染

例如,ajax獲取到用戶購物車的信息,經過拼接字符串的方法將數據渲染在dom中

2. 服務端渲染,瀏覽器請求到的內容其實能夠經過後端加工一下,將一會數據直接渲染好,再給瀏覽器就能夠了

例如,每一個學期開始的時候,學生會獲得課本,。課本上的空題都須要學生本身去寫,當學期末寫完的時候,至關於客戶端將數據渲染在瀏覽器中,學生將答案寫在了課本上

經過,老師均可以獲得教材課本,在這種課本上,答案,講義等等都已經印刷好了,至關於服務端將數據渲染在瀏覽器,書商將答案印在了課本上

客戶端渲染的優勢:比較靈活;通過用戶的動做進行加載的數據

服務端渲染的優勢:減小了前端邏輯,提升了SEO優化等級,只要是在頁面加載的時候就須要渲染的數據,變更較少的數據


在php中實現服務端渲染:
 
在php文件中能夠放入html代碼,訪問php文件的時候就至關於訪問這個對應的html文件,由於在php文件中,因此能夠寫一些php的代碼來渲染數據

在Node中實現服務端渲染:

利用模板引擎,node在渲染模板的時候給模板傳入數據,在模板中就可使用特定的語法來渲染dom了
 
注意:express裏的路由是靠請求路徑劃分的,前一個本身搭的路由是根據請求類型劃分的。
 
MongoDB 數據庫
 
這是一個數據庫,與MySQL(關係型數據庫)的區別就是,它是一個非關係型數據庫 NoSql數據庫
 
關係型數據庫和非關係型數據庫的區別:
 
1.實質。

非關係型數據庫的實質:非關係型數據庫產品是傳統關係型數據庫的功能閹割版本,經過減小用不到或不多用的功能,來大幅度提升產品性能。

2.價格。

目前基本上大部分主流的非關係型數據庫都是免費的。而比較有名氣的關係型數據庫,好比Oracle、DB二、MSSQL是收費的。雖然Mysql免費,但它須要作不少工做才能正式用於生產。

3.功能。

實際開發中,有不少業務需求,其實並不須要完整的關係型數據庫功能,非關係型數據庫的功能就足夠使用了。這種狀況下,使用性能更高、成本更低的非關係型數據庫固然是更明智的選擇。
 
mongodb的特色:
 
1. 性能高、I/O處理快
2. 速度快
3. 穩定很差,佔用空間大
 
1.安裝MongoDB
 
  下載對應版本的mongodb來進行安裝,安裝的後注意須要手動設置數據庫的位置。。。詳細請搜索

  1.在安裝的時候選擇安裝地址,通常狀況下安裝在c盤(默認安裝地址)便可

  2.咱們在c盤(最好)創建一個data文件夾,在data文件夾下面再創建一個db文件夾

  3.在mongodb的bin文件夾下,cmd執行 mongod.exe --dbpath c:\data\db

  4.運行mongod.exe來啓動mongodb

  5.依然在mongodb的bin文件夾下cmd 輸入mongo回車,就能夠操做mongodb,例如 show databases;
 
小貼士:若是安裝不上,由於有一些個dll文件缺乏,要麼去按照百度教的方法下載驅動精靈脩復系統,要麼重裝系統,要麼就用本身的電腦
 
2.MongoDB概念
 
MongoDB是一個基於分佈式文件存儲的數據庫。由C++語言編寫。旨在爲WEB應用提供可擴展的高性能數據存儲解決方案。

它的特色:高性能、易部署、易使用,存儲數據很是方便。
 
3.專業術語
 
SQL術語、概念 | MongoDB術語、概念 | 說明
-----------------|---------------------|--------------------------
database     |      database     |  數據庫
table       | collection          | 表\集合
row              | doucument       | 數據記錄行\文檔
column        | field                  | 數據字段\域
index           | index                | 索引
table joins   |                          | 錶鏈接 mongodb不支持
primary key | primary key      | 主鍵,mongodb自動將_id做爲主鍵
 
4.mongodb的存儲數據相似於js的json格式對象,或者json文件存儲數據的方式:
 
[
    {
        "_id":ObjectId("1726iuhas678971726731"),
        "age":25,
        "city":"beijing",
        "email":"asdgakj@qq.com"
    },
    {
        "_id":ObjectId("1726iuhas678971726731"),
        "age":25,
        "city":"beijing",
        "email":"asdgakj@qq.com"
    }
]

  

5.數據庫
 
一個mongodb中能夠創建多個數據庫。

MongoDB的默認數據庫爲"db",該數據庫存儲在data目錄中。

MongoDB的單個實例能夠容納多個獨立的數據庫,每個都有本身的集合和權限,不一樣的數據庫也放置在不一樣的文件中。
 
6.簡單操做
 
show databases 查看數據庫

db 查看當前數據庫

use name 切換某個數據庫
 
7.文檔
 
文檔是一個鍵值(key-value)對(即BSON)。

MongoDB 的文檔不須要設置相同的字段,而且相同的字段不須要相同的數據類型,這與關係型數據庫有很大的區別,也是 MongoDB 很是突出的特色。
一個簡單的文檔例子以下:
[
    {"genres": ["犯罪","劇情" ],"title": "肖申克的救贖"},
    {"title":"阿甘正傳",grade:"8.4","genres":"勵志"}
]

  

8.集合
 
集合就是 MongoDB 文檔組,相似於 RDBMS (關係數據庫管理系統:Relational Database Management System)中的表格。

集合存在於數據庫中,集合沒有固定的結構,這意味着你在對集合能夠插入不一樣格式和類型的數據,但一般狀況下咱們插入集合的數據都會有必定的關聯性。
 
{
    'title':['aaa',"aaa","aaa",["a":{}]]
},
{
    'title':'bbb'
}

  

9.數據類型
 
String : 這是最經常使用的數據類型來存儲數據。在MongoDB中的字符串必須是有效的UTF-8。

Integer : 這種類型是用來存儲一個數值。整數能夠是32位或64位,這取決於您的服務器。

Boolean : 此類型用於存儲一個布爾值 (true/ false) 。

Double : 這種類型是用來存儲浮點值。

Min/ Max keys : 這種類型被用來對BSON元素的最低和最高值比較。

Arrays : 使用此類型的數組或列表或多個值存儲到一個鍵。

Timestamp : 時間戳。這能夠方便記錄時的文件已被修改或添加。

Object : 此數據類型用於嵌入式的文件。

Null : 這種類型是用來存儲一個Null值。

Symbol : 此數據類型用於字符串相同,但它一般是保留給特定符號類型的語言使用。

Date : 此數據類型用於存儲當前日期或時間的UNIX時間格式。能夠指定本身的日期和時間,日期和年,月,日到建立對象。

Object ID : 此數據類型用於存儲文檔的ID。

Binary data : 此數據類型用於存儲二進制數據。

Code : 此數據類型用於存儲到文檔中的JavaScript代碼。

Regular expression : 此數據類型用於存儲正則表達式

  

10.庫的操做
 
* Help查看命令提示

help

db.help()

db.test.help()

db.test.find().help()

* 建立/切換數據庫

use music

* 查詢數據庫

show dbs 空庫將不會顯示

db.albums.insertOne({'title':'bey bey'})來插入一條後再看

* 查看當前使用的數據庫

db/db.getName()

* 顯示當前DB狀態

db.stats()

* 查看當前DB版本

db.version()

* 查看當前DB的連接機器地址

db.getMongo()

* 刪除數據庫

db.dropDatabase()

  

Collection彙集集合操做
 
建立一個彙集集合

db.createCollection("collName", {size(集合大小): 20, capped(固定大小,可提升使用效率): true, max(最大值): 100});

db.collName.isCapped(); //判斷集合是否爲定容量

獲得指定名稱的彙集集合

db.getCollection("account");

獲得當前db的全部彙集集合

db.getCollectionNames();

顯示當前db全部彙集的狀態

db.printCollectionStats();

  

添加、修改與刪除集合數據
 
查看
 
db.users.find()

  

添加
 
db.users.save({name: ‘zhangsan', age: 25, sex: true});

db.users.insertOne({name: ‘zhangsan', age: 25, sex: true});

db.users.insertMany([{name: ‘zhangsan', age: 25, sex: true},{name: ‘zhangsan', age: 25, sex: true}]);

  

修改
 
db.users.update({age: 25}(約定條件,所有修改只寫{}), {$set: {name: 'changeName',sex:1}}, false, true);

第三個參數爲,若是沒有這個數據,會不會建立,第四個參數爲,若是有不少,是要全改true,仍是隻改第一條

至關於:update users set name = ‘changeName' where age = 25;

db.users.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true);

至關於:update users set age = age + 50 where name = ‘Lisi';

db.users.update({name: 'Lisi'}, {$inc: {age: 50}, $set: {name: 'hoho'}}, false, true);

至關於:update users set age = age + 50, name = ‘hoho' where name = ‘Lisi';

  

刪除
 
db.users.remove({age: 32});符合條件全刪
db.users.remove({age: 132},{justone:true});只刪一條
db.users.remove({});刪除全部document

 

查詢修改刪除
 
db.users.findAndModify({
    query: {age: {$gte: 25}}, 
    sort: {age: -1}, 
    update: {$set: {name: 'a2'}, $inc: {age: 2}},
    remove: true
});

db.runCommand({ findandmodify : "users", 
    query: {age: {$gte: 25}}, 
    sort: {age: -1}, 
    update: {$set: {name: 'a2'}, $inc: {age: 2}},
    remove: true
});

 

query 過濾條件 $gte大於

sort若是多個文檔符合查詢過濾條件,將以該參數指定的排列方式選擇出排在首位的對象,該對象將被操做,-1位爲降序

remove 若爲true,被選中對象將在返回前被刪除

update 一個 修改器對象

remove 建立新對象若查詢結果爲空

 

在mongodb中根據_id主鍵來查找數據
 
mongodb在存儲數據的時候會自動的爲每個document生成一個_id主鍵,咱們在nodeJS中根據_id查找的時候要注意一點,不能直接:

let _id = '5a0bc041bf680d5ee434683d'
coll.find({_id:_id})

須要從mongodb模塊中引入ObjectID方法,這個方法能夠將上面的字符串轉成mongodb數據庫能夠識別的_id數據類型

var ObjectID = require("mongodb").ObjectID
let _id = '5a0bc041bf680d5ee434683d'
coll.find({_id:ObjectID(_id)})

 

 
彙集集合查詢
 
查詢全部記錄
 
db.userInfo.find();

至關於:select* from userInfo;

查詢去重後數據

db.userInfo.distinct("name");

至關於:select distict name from userInfo;

查詢age = 22的記錄

db.userInfo.find({"age": 22});

至關於: select * from userInfo where age = 22;

查詢age > 22的記錄

db.userInfo.find({age: {$gt: 22}});

至關於:select * from userInfo where age >22;

查詢age < 22的記錄

db.userInfo.find({age: {$lt: 22}});

至關於:select * from userInfo where age <22;


查詢age >= 25的記錄

db.userInfo.find({age: {$gte: 25}});

至關於:select * from userInfo where age >= 25;

查詢age <= 25的記錄

db.userInfo.find({age: {$lte: 25}});

查詢age >= 23 而且 age <= 26

db.userInfo.find({age: {$gte: 23, $lte: 26}}); 查詢name中包含 mongo的數據 db.userInfo.find({name: /^mongo/}); //至關於%% select * from userInfo where name like ‘%mongo%’; 查詢name中以mongo開頭的 db.userInfo.find({name: /^mongo/}); 至關於select * from userInfo where name like ‘mongo%’;


查詢指定列name、age數據 db.userInfo.find({}, {name: 1, age: 1}); 至關於:select name, age from userInfo; 查詢指定列name、age數據, age > 25

db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});

至關於:select name, age from userInfo where age >25;

按照年齡排序

升序:db.userInfo.find().sort({age: 1});

降序:db.userInfo.find().sort({age: -1});

查詢name = zhangsan, age = 22的數據

db.userInfo.find({name: 'zhangsan', age: 22});

至關於:select * from userInfo where name = ‘zhangsan' and age = 
’22';

查詢前5條數據

db.userInfo.find().limit(5);

至關於:select top 5 * from userInfo;



查詢10條之後的數據

db.userInfo.find().skip(10);

至關於:select * from userInfo where id not in (
   select top 10 * from userInfo
);

查詢在5-10之間的數據

db.userInfo.find().limit(10).skip(5);

or與 查詢

db.userInfo.find({$or: [{age: 22}, {age: 25}]});

至關於:select * from userInfo where age = 22 or age = 25;

查詢第一條數據

db.userInfo.findOne();

至關於:selecttop 1 * from userInfo;

db.userInfo.find().limit(1);

查詢某個結果集的記錄條數

db.userInfo.find({age: {$gte: 25}}).count();

至關於:select count(*) from userInfo where age >= 20;

 

今天說的知識點有點多,須要記得也比較多,有須要的地方能夠記下來,方便運用,好了,就這麼多了。php

相關文章
相關標籤/搜索