zoukankan      html  css  js  c++  java
  • 应用Mongoose开发MongoDB(1)数据库连接

    最近因为项目,接触了MongoDB,因为是分工合作,我负责的部分主要是实现前端对数据库增删查改的需求,因此以下内容只着重于针对不同问题如何进行解决。

    整个工程的最终目的是通过mongoose编写数据库方法,并将其使用REST风格封装成API供前端调用。(在实际工程中,DELETE和PUT也尽量被转成POST方法了)。

    首先在server.js中导入mongoose模块,进行数据库连接,开启监听,在settings.js中设置数据库ip、端口号及路由地址等信息,在routes.js中设置具体的路由及调用的函数,调用的函数放在’../ controllers/’文件夹中,controllers中的函数对输入和输出进行整合,通过调用定义在’../models/’文件夹中的Schema, model和对数据库的基础操作函数,实现API的封装。

    在工程文件夹中使用命令行执行node server.js后,即可使用postman等工具测试写好的API了,另外对数据库的可视化,使用Robomongo工具。

    关键代码:

    server.js: 

    // import necessary modules
    var express = require('express');
    var bodyParser = require('body-parser');
    var mongoose = require('mongoose'); 
    
    // import necessary self-defined modules
    var webEntry = require('./settings').webEntry;
    
    var _config = webEntry.config || 'config',
        domainName = webEntry.domainName,
        route = webEntry.route;
    
    var config = require('./' + _config),
        dbUri = webEntry.dbUri,
        restPort = webEntry.restPort,
        routes = require('./routes/'+route);
    
    // 数据库连接
    var db = mongoose.connection;
    if (typeof(db.db) === 'undefined') {
      mongoose.connect(dbUri);
    }
    db.on('error', console.error.bind(console, 'connection error:'));
    db.once('open', function () {
      console.log(domainName + ' MongoDB: init.js');
    }); 
    
    // node服务
    var app = express();
    app.set('port', restPort);
    
    
    app.use(bodyParser.json({ limit: config.bodyParserJSONLimit }));
    app.use(bodyParser.urlencoded({ extended: true }));
    
    // 跨域访问
    app.all('*', function (req, res, next) {
      var domain = req.headers.origin;
      if (config.Access_Control_Allow_Origin.indexOf(domain) > -1) {
        res.setHeader('Access-Control-Allow-Origin', domain);
        res.setHeader('Access-Control-Allow-Credentials', true);
        res.setHeader('Access-Control-Allow-Methods', 'GET, POST, DELETE, PUT');
        res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type, Authorization'); 
    
        res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
        res.setHeader("Pragma", "no-cache"); // HTTP 1.0.
        res.setHeader("Expires", "0"); // Proxies.
      }
      if ('OPTIONS' == req.method) return res.sendStatus(200);
      next();
    });
    
    // 路由设置
    routes(app, webEntry); 
    
    // 找不到正确路由时,执行以下操作
    app.all('/*', function(req, res, next) {
        res.send("Router Error!");
    });
    
    app.listen(app.get('port'));
    

      


    settings.js  

    //设置数据库所在IP,端口及数据库名称
    var ip="localhost"
    var port="27017"
    var db = "cdmis"
    
    module.exports = {
      webEntry: {
        domain: ip,
        domainName: ip,
        path: '',
    dbUri: 'mongodb://'+ip+':'+port+'/'+ db,
    //API端口号
    restPort:4050,
    //路由地址所在文件
        route: 'routes',
        routeIO: '',
        view: '',
        config: ''
      }
    }
    

      


    routes.js 

    // self-defined configurations
    var config = require('../config');
    
    // middlewares
    //声明中间件集合
    
    // controllers
    //声明控制器集合
    var doctorCtrl = require('../controllers/doctor_controller');
    
    module.exports = function(app, webEntry) {
    app.get('/', function(req.res) {
        res.send('Server Root');
    });
    
    //设置路由路径及路径需要调用的函数或组合
    app.post('/doctor/postDocBasic', doctorCtrl.insertDocBasic);
    app.get('/doctor/getDoctorInfo', doctorCtrl.getDoctorObject, doctorCtrl.getComments, doctorCtrl.getDoctorInfo);
    //…
    };
    

      


    每次增加新的API时都要在module.exports内增加app.get()或app.post()并注意controllers的路径的require 

  • 相关阅读:
    Java并发编程原理与实战九:synchronized的原理与使用
    Java并发编程原理与实战八:产生线程安全性问题原因(javap字节码分析)
    Java并发编程原理与实战七:线程带来的风险
    Java并发编程原理与实战六:主线程等待子线程解决方案
    Java并发编程原理与实战五:创建线程的多种方式
    Java并发编程原理与实战四:线程如何中断
    Java并发编程原理与实战三:多线程与多进程的联系以及上下文切换所导致资源浪费问题
    Java并发编程原理与实战二:并行&并发&多线程的理解
    ConcurrentHashMap 产生NullPointerException
    Java并发编程原理与实战一:聊聊并发
  • 原文地址:https://www.cnblogs.com/gyjerry/p/6858620.html
Copyright © 2011-2022 走看看