最近因为项目,接触了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

转载于:https://www.cnblogs.com/gyjerry/p/6858620.html

应用Mongoose开发MongoDB(1)数据库连接相关推荐

  1. 应用Mongoose开发MongoDB(2)模型(models)

    数据模型及基础操作模板 为了使工程结构清晰,将数据模型(Schema, Model)的建立与增删查改的基础操作模板写在一起,命名为数据库设计中的Collection(对应于关系型数据库中的表定义)名, ...

  2. mongoose操作mongodb

    http://mongoosejs.com/docs/api.html#index-js mongoose是nodejs环境下操作mongodb的模块封装,使用mongoose之后,实际上只需要在mo ...

  3. koa --- mongoose连接mongoDB

    使用Mongoose对MongoDB进行操作 const mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/t ...

  4. Node.js使用mongoose操作mongodb

    软件配置: 1.node v8.9.3 2. npm 5.5.1 3. mongoose及MongoDB版本见下package.json // package.json {   "name& ...

  5. Egg 中结合Mongoose操作MongoDB

    1. 安装模块 npm i egg-mongoose --save 2. 配置 egg-mongoose 插件 // config/plugin.js 'use strict'; exports.ej ...

  6. node --- 使用mongoose连接mongoDB,并初始化所有的Schema

    写了一个init.js函数 使用了glob来对协助完成(https://github.com/isaacs/node-glob) 连接的数据库的名称(smile-vue) 连接数据库操作:connec ...

  7. Spring Boot开发MongoDB应用实践

    本文继续上一篇定时任务中提到的邮件服务,简单讲解Spring Boot中如何使用MongoDB进行应用开发. 上文中提到的这个简易邮件系统大致设计思路如下: 1.发送邮件支持同步和异步发送两种 2.邮 ...

  8. mongoose和mongodb的几篇文章 (ObjectId,ref)

    http://mongoosejs.com/docs/populate.html http://stackoverflow.com/questions/6578178/node-js-mongoose ...

  9. MySQL jfinal 生成数据_JFinal Web开发学习(四)数据库连接与自动生成model

    1.新建数据库jfinal_test,user表 /* Navicat MySQL Data Transfer Source Server : . Source Server Version :505 ...

  10. php软件开发--mongodb

    mongodb介绍,相关概念及安装: mongodbMongoDB 是一个介于关系数据库和非关系数据库之间的产品缺点:不支持连表查询,不支持sql语句,不支持事务存储过程等,所以不适合存储数据间关系比 ...

最新文章

  1. 【IM】从贝叶斯角度理解生成式和判别式及参数估计方法
  2. 《软件加密与解密》第三版学习日志一
  3. javaSE_06Java中的数组(array)-思维导图
  4. python中ttk详解_Python 中的Property 动态属性和特性详解
  5. 装饰者模式(C#)实现
  6. 【Java中的网络编程】
  7. ulimit和core文件的使用方法
  8. 密度泛函 matlab,dft计算(密度泛函理论dft计算)
  9. 中国信通院发布《区块链赋能新型智慧城市白皮书(2019年)》解读(附全文下载)
  10. pdffactory 打印字体_PdfFactory(虚拟打印机)
  11. 【Ubuntu+Caffe+CPU】Cannot use GPU in CPU-only Caffe: check mode
  12. 一个JSP页面打开另外一个JSP页面并传值
  13. 程序员的自我修养-读后感
  14. 共轭对称序列和共轭反对称序列
  15. java版本电子招标采购系统源码—企业战略布局下的采购
  16. [UWP]使用Acrylic(亚克力)
  17. 项目管理工具之Git/GitHub/Gitee/Gitlab
  18. 南都周刊:别了,老兵乔布斯
  19. 【linux教程(一)】Linux shell入门
  20. io.imshow(img) 绘制背景和绘制子图

热门文章

  1. 147.对链表进行插入排序
  2. java多线程(2)----继承的方式创建多线程
  3. fscapture下载收费吗?_网课视频及短视频下载工具
  4. 干货 | 一文弄懂机器学习中偏差、方差
  5. Ribbon和Feign的对比-带简易例子
  6. 卡方分布的定义与概率密度的计算
  7. c语言输出杨辉三角漏斗,for循环输出漏斗的形状【java】
  8. 以前是传xml的吗_关于XML:新手入门.
  9. Linux Centos 常用命令整理
  10. Java根据国家二字码获取国家英文名称,中文名称实例