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

应用Mongoose开发MongoDB(1)数据库连接的更多相关文章

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

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

  2. 应用Mongoose开发MongoDB(3)控制器(controllers)

    控制器的基本构成与如何通过路由调用 控制器中通过建立函数并导出,实现前端对数据库的查询.新建.删除与修改的需求,并使之可以在路由中调用,完成API的封装.本文着重于结构之间的关系,具体问题解决方法将在 ...

  3. Node.js开发——MongoDB与Mongoose

    为了保存网站的用户数据和业务数据,通常需要一个数据库.MongoDB和Node.js特别般配,因为MongoDB是基于文档的非关系型数据库,文档是按BSON(JSON的轻量化二进制格式)存储的,增删改 ...

  4. nodejs(一) 简单登录验证 使用mongoose 操作MongoDB

    ---恢复内容开始--- 开发使用webstorm 9  新建nodejs+express 项目 newfarmer 文章目录 配置Mongoose 创建目录及文件 插入数据,POST提交JSON增加 ...

  5. mongodb学习(3)--- NodeJs使用mongoose操作mongodb

    转载: https://cnodejs.org/topic/50c145ed637ffa4155c7eaee 首先对于以下错误说明(有写 db.close): Error: db object alr ...

  6. 在express中使用Mongoose连接MongoDB

    为何要学Mongoose? Mongoose是MongoDB的一个对象模型工具,封装了MongoDB对文档的的一些增删改查等常用方法,让NodeJS操作Mongodb数据库变得更加灵活简单. 0.安装 ...

  7. Node使用Mongoose操作MongoDB数据库——增删改查的实现

    当初刚出社会时就规划了下自己的职业生涯:先成为一名优秀的前端工程师,再成为一名全栈工程师(精通前端开发.后台开发和客户端开发),最后成为一名优秀的系统架构师.转眼间已经工作快三年,是时候迈出关键性的一 ...

  8. 用mongoose实现mongodb增删改查

    //用户 var mongoose = require("mongoose"), setting = require("./setting"); //配置连接数 ...

  9. node-express项目的搭建并通过mongoose操作MongoDB实现增删改查分页排序(四)

    最近写了一个用node来操作MongoDB完成增.删.改.查.排序.分页功能的示例,并且已经放在了服务器上地址:http://39.105.32.180:3333. Mongoose是在node.js ...

随机推荐

  1. 【ARC082E】ConvexScore

    Description 给定二维直角坐标系上的N个点\((X_i,Y_i)\),定义一个有N个点中的部分点所构成点集为"凸点集",当且仅当该集合内的所有点恰好构成一个面积为正的凸多 ...

  2. Flash 解题报告

    Flash Description 给你一颗树,需要把每个点染色,每个点染色时间为\(t_i\),要求同时染色的点的集合为树的独立集,最小化染色结束时间之和. 其实题面蛮有趣的♂ HINT \(n\l ...

  3. Linux上case用法

    Linux上case用法示例: #!/bin/bash # This is a script for test case ASK_COUNT=$ #从参数获取该变量的值 # if [ -z " ...

  4. 数据结构(三)串---KMP模式匹配算法

    (一)定义 由于BF模式匹配算法的低效(有太多不必要的回溯和匹配),于是某三个前辈发表了一个模式匹配算法,可以大大避免重复遍历的情况,称之为克努特-莫里斯-普拉特算法,简称KMP算法 (二)KMP算法 ...

  5. SQL记录-PLSQL循环

    PL/SQL循环   可能有一种情况,当需要执行的代码块的几个多次.在一般情况下,语句顺序执行:一个函数的第一条语句,首先执行,然后是第二个...等等. 编程语言提供了各种控制结构,允许更多复杂的执行 ...

  6. SHELL (2) —— Shell变量的核心基础知识和实践

    摘自:Oldboy Linux运维——SHELL编程实战 Shell变量:用一个固定的字符串(也可能是字符.数字等的组合)代替更多.更复杂的内容,该内容里可能还会包含变量.路径.字符串等其它的内容. ...

  7. 2-SAT问题的方案输出

    2-sat 推荐学习资料: 伍昱的2003年IOI国家集训队论文<由对称性解2-sat问题> 论文链接:https://wenku.baidu.com/view/31fd7200bed5b ...

  8. Mac下安装zsh(Oh My ZSH)的shell,替代原有的bash

    说明:一开始装zsh我是拒绝的,因为这个东西装简单,卸载很难,并且装了之后默认Shell的配置文件不能用了,比如~/.bashrc这些.所以在装的时候要再三考虑好! 官网:http://ohmyz.s ...

  9. html之div始终停留在屏幕中间部分

    需求: 使得某一个div始终停留在屏幕中间 实现: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...

  10. HDU 2112 HDU Today 最短路

    题目描述: Problem Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这 ...