1. 程式人生 > >四:後臺數據庫設計(化妝品表格)

四:後臺數據庫設計(化妝品表格)

esc data nco cto 連接數據庫 objectid gedit 化妝 errno

1.數據庫字段的設計:

  1.1.在數據庫moon中新建表格“MakeUp”

  1.2.具體的字段含義:     brand: "", //商品的類型   careType:" ", //護理類型 //可選值:facialCare:面部護理類型 ; perfumeCosmetics:香水彩妝類型 ;img:[ ],//商品圖片    useType:" " , //用途類型,可選值:“口紅” ;“化妝工具” ;“BB霜” ; “防曬霜” ;“洗面奶” ; “水” ; “乳”; ...........等    originPrice:number , //未打折價格    newPrice:number , //打折價格    goodsName:" " , //商品名稱    goodsDescribe:" " ,//商品描述    goodsDetail:" " ,//商品詳情,在商品詳情中的商品詳情描述圖片,是一個字符串類型的圖片地址    stock:number , //庫存量     monthlySales:number , //月銷售量     SalesCount:number, //總銷售量     productionPlace:"" //產地

2.mongoose的使用:

  2.1.基於對新知識的學習熱情,雖然前面是有用到對mongodb的封裝allhandlers.js,,基本可以達到我目前的功能,但是基於好奇現在開發的話用mongodb大多數可能都選擇用mongoose來過度使用mongodb,so我也去研究了下,前面有博文寫到基本的mongoose的使用,個人是感覺使用mongoose的話,會讓mongo數據庫在使用時更容易語義化,和操作,更穩定吧。

  2.2.進入後臺項目文件夾routes 新建文件夾Model,在裏面新建文件AllHandler.js文件,對mongoose操作做一個基本的增刪改查的封裝,具體代碼如下:

技術分享圖片
var assert = require(‘assert‘); //
斷言包 //這個頁面來封裝基本的增刪改查的方法 // var add = function(Mod, selector, fn) { //參數1是實例化的Model,參數2是需要新增的內容 var model = new Mod(selector[0]); try { model.save(function(err, res) { assert.equal(err, null); fn(res) }) } catch (ex) { console.log("AllHandler報錯:" + ex); fn([]); } }
// //查所有根據條件 var find = function(Mod, selector, fn) { try { Mod.find(selector[0], selector[1] ? selector[1] : "", function(err, res) { assert.equal(err, null); fn(res) }) } catch (ex) { console.log("AllHandler報錯:" + ex); fn([]); } } //通過ID更新某條數據 var updateById = function(Mod, selector, fn) { var id = selector[0].id; var updatestr = selector[1]; try { Mod.findByIdAndUpdate(id, updatestr, function(err, res) { if (err) { assert.equal(err, null); } else { fn(res); } }) } catch (ex) { console.log("AllHandler報錯:" + ex); fn(null); } }; //通過ID來刪除一條數據 var deleteById = function(Mod, selector, fn) { var id = selector[0].id; try { Mod.findByIdAndRemove(id, function(err, res) { if (err) { assert.equal(err, null); } else { fn(res); } }) } catch (ex) { console.log("AllHandler報錯:" + ex); fn(null); } }; //通過條件來刪除所有符合條件的 var deleteByStr = function(Mod, selector, fn) { var conditions = selector[0]; try { Mod.remove(conditions, function(err, res) { if (err) { assert.equal(err, null); } else { fn(res); } }) } catch (ex) { console.log("AllHandler報錯:" + ex); fn(null); } } //分頁 var page = function(Mod, selector, fn) { var pageSize = selector[1].pageSize || 5; //一頁多少條 var currentPage = selector[1].currentPage || 1; //當前第幾頁 var skipnum = (currentPage - 1) * pageSize; //跳過數 try { var results; var count; Mod.count(selector[0], function(err, result2) { assert.equal(err, null); count = result2; }); /* Mod.find({}, function(err, res) { //在mongoose中第一個參數查詢條件必須是一個json集合對象,如果是空寫成{},而不能是“”; assert.equal(err, null); console.log(res) fn(res) })*/ Mod.find(selector[0]).skip(skipnum).limit(pageSize).exec(function(err, res) { //console.log("hahaha") assert.equal(err, null); if (res) { results = res; //console.log(count, results) fn(results, count); } }); } catch (ex) { console.log("AllHandler報錯:" + ex); } } var OperateType = { add: add, find: find, findSome: find, page: page, deleteByStr: deleteByStr, deleteById: deleteById, updateById: updateById }; module.exports = function(Mod, i, selector, fn) { //model ; 參數 ; 回調函數 OperateType[i](Mod, selector, fn); }
View Code

  2.3.然後還是繼續在上面的Model文件夾中,新建一個基本連接的文件MyMongoose.js文件,進行連接數據庫操作,具體代碼如下:

技術分享圖片
var mongoose = require(‘mongoose‘);
var Url = "mongodb://localhost:27017/moon"; //要用到的數據庫moon;
var db = mongoose.connect(Url);

// 監聽連接成功
mongoose.connection.on(‘connected‘, function() {
    console.log("成功連接到數據庫:" + Url)
})

//監聽連接異常
mongoose.connection.on(‘error‘, function(err) {
    console.log("連接數據庫出現異常:" + err)
})

//監聽連接斷開
mongoose.connection.on(‘disconnected‘, function() {
    console.log(‘連接數據庫現在已經斷開‘)
})

module.exports = {
    mongoose: mongoose,
    db: db
};
View Code

  2.4.然後還是在routes文件夾中新建文件ModelMakeUp.js,去定義化妝品表格的model的schema,以及增刪改差的操作路由等,具體代碼如下:

技術分享圖片
//MakeUp表的數據庫操作
var express = require(‘express‘);
var router = express.Router();
var crypto = require(‘crypto‘);
var ObjectId = require(‘mongodb‘).ObjectId;
var mongoose = require(‘./Model/MyMongoose‘).mongoose;
var handle = require(‘./Model/AllHandler‘);
var formidable = require(‘formidable‘);
var fs = require(‘fs‘);

/*
        brand: "",  //商品的類型
        careType:" ", //護理類型  //可選值:facialCare:面部護理類型 ; perfumeCosmetics:香水彩妝類型 ;img:[ ],//商品圖片
        useType:" " , //用途類型,可選值:“口紅” ;“化妝工具” ;“BB霜” ; “防曬霜” ;“洗面奶” ; “水” ; “乳”; ...........等
        originPrice:number , //未打折價格
        newPrice:number , //打折價格
        goodsName:" " , //商品名稱
        goodsDescribe:" " ,//商品描述
        goodsDetail:" " ,//商品詳情,在商品詳情中的商品詳情描述圖片,是一個字符串類型的圖片地址
        stock:number , //庫存量
        monthlySales:number , //月銷售量
        SalesCount:number, //總銷售量
        productionPlace:""  //產地
 */
var schema = mongoose.Schema;
var MakeUpSch = new schema({ //這個表的字段
    goodsName: String,
    goodsDescribe: String,
    goodsDetail: String,
    brand: String,
    careType: String,
    useType: String,
    originPrice: Number,
    newPrice: Number,
    productionPlace: String,
    img: { type: String, default: "http://localhost:3000/images/makeUp/啦.jpg" },
    stock: Number,
    SalesCount: Number,
    monthlySales: Number
});

var MolMakeUp = mongoose.model(‘MakeUp‘, MakeUpSch, ‘MakeUp‘);

//往表格裏面插數據
router.post(‘/add‘, function(req, res) {
    var collection = [];
    if (req.body.collection.img == "") {
        req.body.collection.img = "http://localhost:3000/images/makeUp/啦.jpg"
    }
    collection[0] = req.body.collection;
    handle(MolMakeUp, ‘add‘, collection, function(result) {
        res.send(result)
    })
})

//查詢表裏所有數據
router.post("/find", function(req, res) {
    var collection = [{}];
    handle(MolMakeUp, ‘find‘, collection, function(result) {
        res.send(result)
    })
})

//查詢表裏符合條件的數據,並且篩選只要部分字段
router.post("/findSome", function(req, res) {
    var collection = [{}, {}];
    collection[1] = req.body.show;
    handle(MolMakeUp, ‘find‘, collection, function(result) {
        res.send(result)
    })
})


//根據ID刪除表格的數據
router.post("/deleteById", function(req, res) {
    var id = req.body.id;
    var collection = [];
    collection[0] = { id: ObjectId(id) };
    handle(MolMakeUp, "deleteById", collection, function(result) {
        res.send(result)
    })
})

//根據ID來update更新數據
router.post("/updateById", function(req, res) {
    var id = req.body.selector._id;
    var collection = [];
    collection[0] = { id: ObjectId(id) };
    if (req.session.makeUp_imgPath != "" && req.session.makeUp_imgPath != null) {
        req.body.selector.img = req.session.makeUp_imgPath;
        console.log(req.body.selector.img[0]);
        console.log(req.session.makeUp_imgPath);
    }
    collection[1] = req.body.selector;
    handle(MolMakeUp, "updateById", collection, function(result) {
        res.send(result)
    })
})


//分頁查詢
router.post(‘/page‘, function(req, res) {
    var selector = [];
    selector[0] = {};
    selector[1] = {
        pageSize: req.body.rows, //每頁展示幾條數據
        currentPage: req.body.page //當前在第幾頁
    };
    //res.send("111")
    handle(MolMakeUp, ‘page‘, selector, function(result, count) {
        var result = { result: result, count: count }
        res.send(result);
    })

})


//wangEditor編輯器接口
//wangeditor上傳圖片的地址
router.post("/wangeditor/upload", function(req, res, next) {
    var form = new formidable.IncomingForm();
    //設置文件上傳存放地址
    form.uploadDir = "./public/images/makeUp";
    //執行裏面的回調函數的時候,表單已經全部接收完畢了。
    form.parse(req, function(err, fields, files) {
        //if(files.File){
        var oldpath = files.myFileName.path;
        var extname = files.myFileName.name;
        //新的路徑由三個部分組成:時間戳、隨機數、拓展名
        var newpath = "./public/images/makeUp/" + extname;
        //改名
        try {
            fs.rename(oldpath, newpath, function(err) {
                if (err) {
                    res.json({ errno: 1, data: [] });
                };
                var mypath = newpath.replace("./public", "http://localhost:3000");
                req.session.makeUp_imgPath = mypath;
                res.json({ errno: 0, data: [mypath] })
            });
        } catch (ex) {
            res.json({ errno: 1, data: null })
        }

    });
})

module.exports = router;
View Code

3.修改路由,讓能訪問到上面的路徑,進入routes裏面的routes.js修改成下面的代碼:

// 主要的路由文件

module.exports = function(app) {
    app.use(‘/‘, require(‘./index‘))
    app.use(‘/users‘, require(‘./users‘))
    app.use(‘/ModelMakeUp‘, require(‘./ModelMakeUp‘)) //加這個
}

四:後臺數據庫設計(化妝品表格)