nodejs學習筆記二鏈接mongodb

Isaac71O 9年前發布 | 20K 次閱讀 MongoDB Node.js Node.js 開發

來自: http://www.cnblogs.com/chuaWeb/p/5174951.html

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('記賬本添加了一條數據'); });</pre>

上面就是使用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;</pre>

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.png app.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)

})</pre>

增刪改查數操作上面就都有了。只要弄幾個簡單的網頁就可以把server.js跑起來了。

里面express的用法可以參考 菜鳥教程expres基礎

如果覺得本文不錯,請點擊右下方【推薦】!

</div>

 本文由用戶 Isaac71O 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!