寫給小前端er的nodejs,mongodb後端小攻略~ (windows系統~)

一.寫在前面

  迫於學校的壓力,研二上準備回學校作實驗發論文了,感受真的沒意思,這幾天學着搞搞後端,踩了不少坑,整理一下這幾天的坑以避免之後再犯!html


二.本文主要內容(因爲是面向前端同窗的,因此前端的內容就不多了,你們能夠把前端的內容準備好哦~)

  • nodejs-express(nodejs框架)
  • mongodb-mongoose(mongodb框架)
  • 前端我寫的很簡單

demo目錄如圖廢話很少說,下面從零開始~前端


 

三.從nodejs提及

參考資料:七天學會NODEJSnode

  什麼是NodeJS

  JS是腳本語言,腳本語言都須要一個解析器才能運行。對於寫在HTML頁面裏的JS,瀏覽器充當瞭解析器的角色。而對於須要獨立運行的JS,NodeJS就是一個解析器。git

  每一種解析器都是一個運行環境,不但容許JS定義各類數據結構,進行各類計算,還容許JS使用運行環境提供的內置對象和方法作一些事情。例如運行在瀏覽器中的JS的用途是操做DOM,瀏覽器就提供了document之類的內置對象。而運行在NodeJS中的JS的用途是操做磁盤文件或搭建HTTP服務器,NodeJS就相應提供了fshttp等內置對象。github

  如何安裝

  https://nodejs.org/en/從左側官網下載到mongodb

  一直next就好這步最好選擇Add to Path,方便系統找到你後續安裝的模塊包數據庫

  安裝完後能夠在cmd中經過右側代碼測試express

 

  稍微介紹一下npm把,前端的小夥伴多多少少聽過可是可能不清楚是什麼,npm就是後端的包管理工具,能夠直接在命令行輸入命令爲項目添加模塊,功能十分強大,nodejs在安裝的時候已經自動安裝了npm。(前端有相似的bower)npm

  本DEMO咱們須要經過npm安裝下面幾個模塊後端


 

1:express (幫咱們快速完成nodejs開發的框架) 2:mongoose(mongodb的速成框架)

  安裝方式如圖(xxx就是所須要安裝的模塊,夠簡單把)

  你們自行安裝一下express和mongoose模塊

 

 http://www.expressjs.com.cn/ 
上邊是express框架的官網,簡潔明瞭~你們能夠看看~

 

  咱們經過express的應用生成器快速生成咱們DEMO的目錄!在CMD中輸入以下兩行命令完成在當前工做目錄下建立一個命名爲 demoname 的應用。

npm install express-generator -g

$ express demoname

//demoname就是你給項目的名字

 咱們找到生成的目錄

打開app.js把裏面東西都刪掉,對咱們的DEMO來講裏面多餘的東西太多,把下面的內容替換進去~而後把大家前端的靜態內容CSS,IMG,JS等等都放到Public文件夾裏面!

var express = require('express');
//引入express模塊
var path = require('path');
//引入path模塊爲了指向靜態資源
var port = 80;
//指定端口變量的值
var app = express();
//app這個Object表示express應用
var mongoose = require("mongoose"); 
//引入mongoose模塊
var db = mongoose.connect("mongodb://127.0.0.1:27017/player"); 
//指定mongodb鏈接的數據庫地址,格式爲mongoose(「mongodb://user:pass@localhost:port/database」),本demo中使用的庫名爲player
var Play = require('./models/model');

db.connection.on("error", function (error) { 
console.log("數據庫鏈接失敗:" + error); 
}); 
db.connection.on("open", function () { 
console.log("——數據庫鏈接成功!——"); 
});

app.use(express.static(path.join(__dirname, 'public')));
//指定靜態資源位置
app.set('views','./views');
//指定視圖位置
app.set('view engine','ejs');
//指定模板引擎
app.listen(port);
//監聽80端口


//下面的內容是模板加載的關鍵,在最後細說 app.get('/',function (req,res) { res.render('index',{ }); }); app.get('/pokergame',function (req,res) { Play.find ( function(err, docs) { // err是錯誤信息,docs就是查詢返回的文檔,是一個數組 res.render('pokergame',{ name:name, player:"pp" }) } ); });

 

 


 

express中的模板引擎

  1:Jade——先進可是上手比較複雜    2:ejs——上手容易(我只用這種,由於我發現這種和我之前用過的underscore裏面的模板很像哦!沒必要什麼都追新嘛!很累的!)

 

有同窗會問,我寫的前端頁面放在哪裏能夠顯示?兩種方式,可是隻有使用模板的第二種方式能夠填充數據庫數據,好比在你的html文件中添加上<%= player %>這種模板語言,以後再從數據庫導入變量替換掉!

  方法一:把HTML看成靜態資源放在public文件夾中,而後把app.js裏的

res.render('index',{ });

  這行代碼替換成

res.sendFile("index.html");

  方法二:把你的HTML文件放在views文件夾中而且把後綴名改成ejs便可

  作了上述兩種操做之一後,瀏覽器訪問localhost便可!


Mongodb與Mongoose 

終於能夠和數據庫進行交互了心好累

參考資料1:MongoDB學習筆記之Mongoose的使用2:Mongoose的model.find()查出來的爲啥不是文檔呢;求幫助! 3:使用mongoose過程當中遇到的疑惑(已經解決) 4:Mongodb入門

入門科普:

MongoDB的邏輯結構是一種層次結構,主要由:文檔(document)、集合(collection)、數據庫(database)這三部分組成的。 
文檔(document):由鍵
/值對構成,像{a:1};{s:」abc」}等,它是MongoDB核心單元,MongoDB的文檔(document),至關於關係數據庫中的一行記錄。
集合(Collection):多個文檔組成一個集合(collection),至關於關係數據庫的表。
數據庫(database):多個集合(collection),邏輯上組織在一塊兒,就是數據庫(database)。 一個MongoDB實例支持多個數據庫(database)。

 

Mongoose

1.1 名詞解釋

Schema  :  一種以文件形式存儲的數據庫模型骨架,不具有數據庫的操做能力

Model   :  由Schema發佈生成的模型,具備抽象屬性和行爲的數據庫操做對

Entity  :  由Model建立的實體,他的操做也會影響數據庫

 

 

第一步:

安裝mongodb https://www.mongodb.com/download-center?jmp=nav#community 下載下圖的版本(本人PC win10系統親測OK~)

注意把mongodb\bin路徑添加到系統環境變量中,方便啓動mongod服務(以下圖!)

 

第二步:在cmd中啓動mongod

【注】若是想在cmd界面中直接操做數據庫的話,只要在啓動mongod狀況下再打開一個cmd而後輸入mongo便可

 

第三步:利用Mongoose操做數據庫

首先:按我最上方的DEMO目錄添加兩個文件夾schemas和models,而後分別輸入

Schemas

var mongoose = require('mongoose');

var PlayerSchema = new mongoose.Schema({
    headimg:String,
    player:String,
    name:String,
    number:Number,
    rate:Number,
    meta:{
        updateAt:{
            type:Date,
            default:Date.now()
        }
    }
})

module.exports = PlayerSchema;

 

Models

var mongoose = require('mongoose');
var PlaySchema = require('../schemas/movie');
//下面是按照PlaySchema創建了一個Collection,model()方法的第三個參數纔是數據庫中Collection的名字
var Play = mongoose.model('Player',PlaySchema,'player');
module.exports
= Play;

 

 

這個時候,DEMO的雛形就造成了,這時候咱們在CMD中mongo命令而後輸入以下命令插入一些數據就能夠加載到咱們的模板中了!

 

##use test2  ->>此時db指向test2  db.createCollection('t_test')->建立collection(即至關於在數據庫test2中新建t_test表),用show collections  //可查看到新建的test2

插入數據:(插入數據的方式有很豐富)

###db.XXX.save():

 

###db.XXX.insert()

 

第四步:模板內容的加載

//這段代碼在app.js中

app.get('/',function (req,res) {
  res.render('index',{

  });
});    

app.get('/test',function (req,res) {
      Play.find (
         function(err, docs) {
        // err是錯誤信息,docs就是查詢返回的文檔,是一個數組
         res.render('index2',{
                 name:name,
                 player:"pp"
         })
         }
      );
    });

 

這段代碼是express中的路由函數,當咱們在瀏覽器中輸入localhost時,會觸發第一個函數的回調;

當咱們輸入localhost/test時,會觸發第二個函數的回調

而Play是Mongoose的模型,實際上就是mongodb中的一個collection

而collection.find()是mongodb的內置函數,查找數據庫的信息,可是注意!mongoose執行find是異步的…返回值是mongoose自己對象 也能夠說在nodejs中大多數都是方法都是異步執行的!

因此下面的寫法才能正確查找到數據庫信息

bookModel.find(function(err, docs) {
    // err是錯誤信息,docs就是查詢返回的文檔,是一個數組
    console.log(docs);
});

添加到視圖模板中的例子以下

bookModel.find(function(err, docs) {
    if(err) {
        console.error(err);
        return;
    }
    res.render('view', {
        list: docs
    });
});

 


 

 

寫到這裏,基本上也就理了一遍流程,第一次寫這種,寫的感受很混亂,之後有機會的話我會寫個提綱再整理,十分很差意思!

下面附上我本身demo的代碼地址可供參考,可是路徑,模塊,數據庫什麼的都要設置好才能正確運行哦!

https://github.com/sologgfun/nodejs-demo.git

                                    written by WJF

                                    2016-08-16

相關文章
相關標籤/搜索