应用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 

 

posted @ 2017-05-15 21:45  gy_jerry  阅读(369)  评论(0编辑  收藏  举报