標籤:
a.安裝mongoose庫用來連結mongodb資料庫
安裝mongodb資料庫參考mongodb安裝
前言(怨言)
本來是想安裝mongodb庫來連結mongodb的,命令列到nodejs工程目錄:npm install mongodb --save
但是發現報gyp ERR! stack Error:Can‘t find python executable "python"錯誤,缺少python運行環境。
我暈死,我連結mongodb還需要Python,這不是存心讓使用者找虐。查到有個網友說相同的庫還有mongoose, mongoskin,他們都比mongodb更有好用。果斷放棄mongodb,使用mongoos。
使用命令:npm install mongoose --save
一下ok了。
b.mongoose的使用
首先我們要知道mongoose建立資料庫有點類似普通的關係資料先定義結構,然後填寫欄位,不想普通的noSql資料庫操作。所以這裡有一些概念需要明白
-
Schema : 一種以檔案形式儲存的資料庫模型骨架,不具備資料庫的操作能力
-
Model : 由Schema發布產生的模型,具有抽象屬性和行為的資料庫操作對
-
Entity : 由Model建立的實體,他的操作也會影響資料庫
在使用mongoose構建和操作資料庫時,先定義資料庫每條資料(普通關聯式資料庫中的一行)的結構,也就是Schema,然後由Schema產生一個model。這個model擁有操縱由Schema結構構成的的整個表格中的資料的能力(包括增刪改查等)。可以由model建立一個個的實體資料,每個實體資料結構和Schema定義的結構相同。
下面直接上執行個體
//記賬本var pocketBookSchema = new mongoose.Schema({ name: String, //定義一個屬性name,類型為String brand: String, //品牌 unitPrice: Number, //單價 quantity: Number, //數量 allPrice: Number, //總價 picture: String, //照片路徑 date: String, //日期"2016-01-01" _saveData: Date, //儲存資料的日期 remark: String //備忘});var pocketBookModel = db.model(‘pocketBook‘,pocketBookSchema);//如果該Model已經發布,則可以直接通過名字索引到,如下://var pocketBookModel = db.model(‘pocketBook‘);var info ={ name: req.body.name, brand: req.body.brand, unitPrice: req.body.unitPrice, quantity: req.body.quantity, allPrice: req.body.allPrice, picture: req.body.picture, date: req.body.date, remark: req.body.remark, _saveData: new Date()}//建立一個執行個體pocketBookEntity = new pocketBookModel(info);//儲存資料庫pocketBookEntity.save(function(err) { if (err) { console.log(‘記賬本添加一條資料失敗‘); return; } console.log(‘記賬本添加了一條資料‘);});
上面就是使用mongoose添加一條資料的例子,當然,真實的項目中還需要串連mongodb資料庫,然後增刪改查都是通過url請求來處理的。本人這裡舉一個完整的例子。
我的nodejs主程式是server.js,在同一級目錄下我建立了一個initdb.js用來連結資料庫和初始化所有需要用到的Schema和相應的model(這裡只用了一個).
initdb.js源碼如下
var mongoose = require(‘mongoose‘); //引用mongoose模組var db = mongoose.createConnection(‘192.168.0.174‘,‘chuayyqing‘); db.on(‘error‘,console.error.bind(console,‘串連錯誤:‘));//記賬本var pocketBookSchema = new mongoose.Schema({ name: String, //定義一個屬性name,類型為String brand: String, //品牌 unitPrice: Number, //單價 quantity: Number, //數量 allPrice: Number, //總價 picture: String, //照片路徑 date: String, //日期"2016-01-01" _saveData: Date, //儲存資料的日期 remark: String //備忘});var pocketBookModel = db.model(‘pocketBook‘,pocketBookSchema);//如果該Model已經發布,則可以直接通過名字索引到,如下://var pocketBookModel = db.model(‘pocketBook‘);exports.pocketBookModel = pocketBookModel;
server.js如下
var express = require("express");var app = express();var bodyParser = require(‘body-parser‘);// 建立 application/x-www-form-urlencoded 編碼解析var urlencodedParser = bodyParser.urlencoded({ extended: false })var models = require("./initdb");//指定靜態檔案路勁static,可以直接存取static下的檔案test.png:http://localhost:8080/test.pngapp.use(express.static(‘chuayyqing/static‘));//查詢記賬本列表app.get("/pocketBook-list",function(req,res){ models.pocketBookModel.find(function(err,pockets){ res.send(pockets); })})//往記賬本添加一條記錄app.post("/pocketBook-addOrUpdateOne",urlencodedParser,function(req,res){ /*info = { name: req.body.name, brand: req.body.brand, unitPrice: req.body.unitPrice, quantity: req.body.quantity, allPrice: req.body.allPrice, picture: req.body.picture, date: req.body.date, remark: req.body.remark, _saveData: new Date(); }*/ var info = req.body; info._saveData = new Date(); console.log(info) //有_id表示是更改一條資料 if(info._id){ var query = { _id: req.body._id }; models.pocketBookModel.findOneAndUpdate(query,info,function(err){ if (err) { console.log(‘記賬本修改一條資料失敗‘); res.send({code:500}); return } console.log(‘記賬本修改了一條資料‘); res.send({code:200}); }); //否則是新增一條資料 }else{ //如果沒有發布,上一段代碼將會異常 var pocketBookEntity = new models.pocketBookModel(info); //儲存資料庫 pocketBookEntity.save(function(err) { if (err) { console.log(‘記賬本添加一條資料失敗‘); res.send({code:500}); return; } console.log(‘記賬本添加了一條資料‘); res.send({code:200}); }); } })//刪除記賬本的一條記錄app.post("/pocketBook-deleteOne",urlencodedParser,function(req,res){ models.pocketBookModel.remove({_id: req.body.id},function(err){ if (err) { console.log(‘記賬本刪除資料失敗‘); res.send({code:500}); return; } console.log(‘記賬本刪除了一條資料‘); res.send({code:200}); })})var server = app.listen(8080,function(){ var host = server.address().address; var port = server.address().port; console.log("應用執行個體,訪問地址為 http://%s:%s", host, port)})
增刪改查數操作上面就都有了。只要弄幾個簡單的網頁就可以把server.js跑起來了。
裡面express的用法可以參考菜鳥教程expres基礎
如果覺得本文不錯,請點擊右下方【推薦】!
nodejs學習筆記二連結mongodb