nodejs學習筆記二連結mongodb

來源:互聯網
上載者:User

標籤:

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.