Node.js 与 MongoDB 交互 【建立多个连接】

一、安装MongoDB

  下载mongoDB  https://www.mongodb.com/download-center?jmp=nav#atlas 

 

  安装完成后,配置环境变量 PATH 中加入“C:\Program Files\MongoDB 2.6 Standard\bin“  //按你安装的路径更改

  找个地方创建两个文件夹,例如:C:\M_DB、C:\M_LOG 分别存放数据库文件和日志文件

  打开目录“C:\Program Files\MongoDB 2.6 Standard\bin”,并在此目录下新建一个mongo.config文件,文件内容如

  ##数据库目录
  dbpath=C:\M_DB

  ##日志输出文件
  logpath=C:\M_LOG\mongodb.log
  以管理员方式打开CMD窗口,运行如下命令安装MongoDB服务 1  
   
  mongod --config "C:\Program Files\MongoDB 2.6 Standard\bin\mongo.config" --install
  
  net start mongodb

  mongo

  以管理员方式打开CMD窗口,运行如下命令安装MongoDB服务 2
  cd C:\Program Files\MongoDB 2.6 Standard\bin

  mongod.exe --dbpath "C:\M_DB" --logpath "C:\M_LOG\mongodb.log"

二、Node.js 配合 Mongoose 【建立多个连接】

  npm install mongoose --save

  
  1、根目录下创建 mongoose 文件夹 ,文件夹下建立连接文件 db.js
/** 
 * Created by cunkuan on 2017/10/13.
 */

var mongoose = require('mongoose'),
    DB_URL1 = 'mongodb://127.0.0.1:27017/node-db',
  DB_URL2 = 'mongodb://192.168.0.24:27017/other-db'  


/**
 * nodeMobile库连接 可建立多个连接库
 */
mongoose.Promise = global.Promise;
var nodeDB = mongoose.createConnection(DB_URL1,{ useMongoClient: true });
var otherDB = mongoose.createConnection(DB_URL2,{ useMongoClient: true });


/**
 * 连接成功
 */
mongoose.connection.on('connected', function () {
    console.log('Mongoose connection open to ' + DB_URL);
});

/**
 * 连接异常
 */
mongoose.connection.on('error',function (err) {
    console.log('Mongoose connection error: ' + err);
});

/**
 * 连接断开
 */
mongoose.connection.on('disconnected', function () {
    console.log('Mongoose connection disconnected');
});

exports.nodeDB = nodeDB;
exports.otherDB = otherDB;
  

 2、根目录下创建 schema 文件夹 例如:创建奖品表 schema 文件夹下 创建奖品表(lucydrawSchema.js 数据模型)
/**
 * 奖品信息
 */
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var db = require('../mongoose/db');

//奖品
var drawList = new Schema({
    drawName: {type: String},//名称
    drawGrade: {type: Number},//奖品等级
    drawCount: {type: Number},//奖品数量
    drawProbability: {type: Number},//奖品概率
});

//活动
var LucyDraw = new Schema({
    name: {type: String},
    startTime: {type: Date, default: Date.now},
    endTime: {type: Date, default: Date.now},
    desc:{type: String},
    countType:{type: String},
    count:{type: Number},
    effect:{type: Boolean},
    drawList: [drawList],
});


module.exports = db.nodeDB.model('LucyDraw', LucyDraw);

  

  3、routes 文件夹下,创建路由文件 lucydrawRoutes.js (passport 是 用于权限验证的

var passport = require('passport');

var LucyDraw = require("../schema/lucydrawSchema");

exports.pcRouter = function (router) {

    /**
     * 新建抽奖
     */
    router.post('/addlucydraw', passport.authenticate('bearerPC', {session: false}), function (req, res, next) {
        var data = req.body;
        var lucyDrawObj = new LucyDraw(data);
        lucyDrawObj.save(function (err, result) {
            if (err) {
                res.json({
                    code: '500',
                    msg: "Error:" + err
                });
            } else {
                res.json({
                    code: '0',
                    result: result
                });
            }
        })
    });

    /**
     * 抽奖列表
     */
    router.get('/lucydrawlist', passport.authenticate('bearerPC', {session: false}), function (req, res, next) {
        var page = req.query.page || 0;
        var size = req.query.size || 10;
        var query = LucyDraw.find({});
        query.limit(parseInt(page));
        query.skip(parseInt(page) * parseInt(size));
        query.sort({createTime: 1});
        query.exec(function (err, result) {
            if (err) {
                res.json({
                    code: '500',
                    msg: "Error: 服务器错误"
                });
            } else {
                res.json({
                    code: '0',
                    result: result
                });
            }
        });
    });

    /**
     * 抽奖查询
     */
    router.get('/lucydraw', passport.authenticate('bearerPC', {session: false}), function (req, res, next) {
        var id = req.query.id;
        LucyDraw.findOne({_id:id},function (err,result) {
            if (err) {
                res.json({
                    code: '500',
                    msg: "Error: 服务器错误"
                });
            } else {
                res.json({
                    code: '0',
                    result: result
                });
            }
        });
    });

    /**
     * 抽奖编辑
     */
    router.put('/lucydraw', passport.authenticate('bearerPC', {session: false}), function (req, res, next) {
        var id = req.query.id;
        var data = req.body;
        LucyDraw.update({_id:id},data,function (err,result) {
            if (err) {
                res.json({
                    code: '500',
                    msg: "Error: 服务器错误"
                });
            } else {
                res.json({
                    code: '0',
                    result: result
                });
            }
        });
    });

    /**
     * 抽奖上下架
     */
    router.put('/lucydraw_effect', passport.authenticate('bearerPC', {session: false}), function (req, res, next) {
        var id = req.query.id;
        var effect = req.query.effect;
        LucyDraw.update({_id:id},{effect:effect},function (err,result) {
            if (err) {
                res.json({
                    code: '500',
                    msg: "Error: 服务器错误"
                });
            } else {
                res.json({
                    code: '0',
                    result: result
                });
            }
        });
    });

};

 

  4、app.js 添加代码

var lucydrawRoutes= require('./routes/lucydrawRoutes');

....
....
....


app.use('/api/lucydraw',lucydrawRoutes);

 

posted @ 2018-01-30 16:29  AI枫  阅读(435)  评论(0编辑  收藏  举报