迫於學校的壓力,研二上準備回學校作實驗發論文了,感受真的沒意思,這幾天學着搞搞後端,踩了不少坑,整理一下這幾天的坑以避免之後再犯!html
demo目錄如圖廢話很少說,下面從零開始~前端
參考資料:七天學會NODEJSnode
JS是腳本語言,腳本語言都須要一個解析器才能運行。對於寫在HTML頁面裏的JS,瀏覽器充當瞭解析器的角色。而對於須要獨立運行的JS,NodeJS就是一個解析器。git
每一種解析器都是一個運行環境,不但容許JS定義各類數據結構,進行各類計算,還容許JS使用運行環境提供的內置對象和方法作一些事情。例如運行在瀏覽器中的JS的用途是操做DOM,瀏覽器就提供了document
之類的內置對象。而運行在NodeJS中的JS的用途是操做磁盤文件或搭建HTTP服務器,NodeJS就相應提供了fs
、http
等內置對象。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" }) } ); });
1:Jade——先進可是上手比較複雜 2:ejs——上手容易(我只用這種,由於我發現這種和我之前用過的underscore裏面的模板很像哦!沒必要什麼都追新嘛!很累的!)
方法一:把HTML看成靜態資源放在public文件夾中,而後把app.js裏的
res.render('index',{ });
這行代碼替換成
res.sendFile("index.html");
方法二:把你的HTML文件放在views文件夾中而且把後綴名改成ejs便可
作了上述兩種操做之一後,瀏覽器訪問localhost便可!
參考資料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而後輸入mongo便可
首先:按我最上方的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