在express项目中有效组织和使用mongoose
平凡之路
1、创建express项目
express mongooseExpress
2、最简express
var express = require("express");
var app = express();
app.get('/', function(req, res) {
res.send('Hello, tinyphp');
});
,function(){
console.log("请在浏览器访问:http://localhost:3000");
});

3、进入工程目录安装mongoose并引入依赖:
npm install --save mongoose
4、修改app.js
var express = require("express");
var app = express();
app.get('/', function(req, res) {
res.send('Hello, tinyphp');
});
,function(){
console.log("请在浏览器访问:http://localhost:3000");
});
//引入mongoose模块
var mongoose = require('mongoose');
//创建数据库连接
var db=mongoose.connect('mongodb://localhost:27017/test');
//检查是否连接成功
db.connection.on("error",function(error){
console.log("数据库连接失败:"+error);
});
db.connection.on("open",function(error){
console.log("++++++数据库连成功++++++");
});
/*****Schema使用*****/
//定义kitty属性
var kittySchema = mongoose.Schema({
name: String
});
//将该Schema发布为Model,第一个参数为集合名
var kittyModel = mongoose.model('kitty', kittySchema);
//用module创建kitty实体
var kittyEntity = new kittyModel({ name: 'tinyphp99' });
console.log("添加数据"+kittyEntity.name); //打印实体名字
//保存数据
kittyEntity.save();
/************/
成功插入一条记录

这里可以看见,所有的操作都是在app.js里面实现的,怎么把他们分离出来呢?
想着想着去肯德基不小心跟服务员说:要两串骨肉分离吧...
开始改造
下面我们把它改装为一访问http://localhost:3000/add就自动添加数据,

config.js 数据库配置信息
module.exports={
mongodb:"mongodb://localhost:27017/test"
}
mongoose.js 数据库连接文件
var mongoose = require('mongoose');
var config= require('./config.js');
module.exports=function(){
var db = mongoose.connect(config.mongodb);
//检查是否连接成功
db.connection.on("error",function(error){
console.log("数据库连接失败:"+error);
});
db.connection.on("open",function(error){
console.log("++++++数据库连成功++++++");
});
//导入模块
require('../models/kitty.model.js');
return db;
}
kitty.model.js 导出Model用于生成实体
var mongoose =require('mongoose');
var kittySchema = mongoose.Schema({
name: String
});
mongoose.model('kitty', kittySchema);
add.js 使用路由简化启动文件逻辑
var express = require('express');
var router = express.Router();
//引入mongoose
var mongoose =require('mongoose');
var kittyModel = mongoose.model('kitty');
/* GET users listing. */
router.get('/', function(req, res, next) {
//用module创建kitty实体
var kittyEntity = new kittyModel({ name: 'china' });
//保存数据
kittyEntity.save();
res.send("添加数据:"+kittyEntity.name);
});
module.exports = router;
app.js
var express = require("express");
//数据库连接
var mongoose =require('./config/mongoose.js');
var db =mongoose();
var add=require('./routes/add');
var app = express();
//使用路由,便于访问add直接添加数据
app.use('/add', add);
,function(){
console.log("请在浏览器访问:http://localhost:3000");
});
执行node app.js

浏览:http://localhost:3000/add

数据name为China的信息成功添加!

温馨提示:测试多了,不妨使用db.table.drop() 把整个集合删除掉噢
注意事项:
mongoose的初始化,要在 express 之前的,
路由里因为用到kittyModel所以引入要在mongoose初始化后,不然会提示出错“Schema hasn't been registered ...”, 自己把上面的顺序调换测试下更深刻噢~

在express项目中有效组织和使用mongoose的更多相关文章
- Mongo基础使用,以及在Express项目中使用Mongoose
MongoDB的基本使用 MongoDB特点: 使用BSON存储数据 支持相对丰富的查询操作(相对其他nosql数据库) 支持索引 副本集(支持多个实例/多个服务器运行同个数据库) 分片(数据库水平扩 ...
- 在express项目中使用formidable & multiparty实现文件上传
安装 formidable,multiparty 模块 npm install formidable,multiparty –save -d 表单上传 <form id="addFor ...
- 在express项目中使用redis
在express项目中使用redis 准备工作 安装redis 安装redis桌面管理工具:Redis Desktop Manager 项目中安装redis:npm install redis 开始使 ...
- 【转】在Express项目中使用Handlebars模板引擎
原文:http://fraserxu.me/2013/09/12/Using-Handlebarsjs-with-Expressjs/ 最近在用Expressjs做一个项目,前后端都用它来完成.自己之 ...
- 浅谈 OneAPM 在 express 项目中的实践
[编者按]OneAPM 运营团队,近日在 github 上发现了一篇文章,特别奉献给大家.本文作者王宇先生从2015年年初就开始使用我们的产品,也是OneAPM 的忠实用户. OneAPM 是一个优秀 ...
- Atitit.css 规范 bem 项目中 CSS 的组织和管理
Atitit.css 规范 bem 项目中 CSS 的组织和管理 1. 什么是BEM?1 1.1. 块(Block)2 1.2. 元素(Element)2 1.3. BEM树(和DOM树类似).3 ...
- 基于Node 的http转发demo,项目中请使用express+http-proxy-middleware
var http = require("http"); var data = ''; function getData() { const options = { host: 'w ...
- 项目中使用express,只是单纯项目中使用
安装express npm install express --save-dv 建议安装到dev依赖里面 安装body-parse npm install body-parser --save-dev ...
- Express 项目,res.cookie() 设置 Cookie 无法被保存在浏览器的 Application 中
res.cookie() 给客户端响应头封装的 Cookie 无法被保存在客户端浏览器的 Application 中,只能在 Set-Cookie 中看到有这个值: 在前后端分离项目中,存在跨域问题, ...
随机推荐
- 递推DP URAL 1586 Threeprime Numbers
题目传送门 /* 题意:n位数字,任意连续的三位数字组成的数字是素数,这样的n位数有多少个 最优子结构:考虑3位数的数字,可以枚举出来,第4位是和第3位,第2位组成的数字判断是否是素数 所以,dp[i ...
- BZOJ3322 : [Scoi2013]摩托车交易
求出最大生成树,则两点间的最大容量为树上两点间的边权的最小值. 设$lim[i]$表示第$i$个订单的城市允许携带的黄金上限,则 $lim[i]=\min(lim[i+1],a[i]和a[i+1]点间 ...
- 详细讲解css单位px,em和rem的含义以及它们之间的区别
一.首先介绍一下px px就是css中最基本的长度单位了,用px做单位基本上没什么问题,可以做到让页面按套路精确的展现! 可但是!但可是!如果全篇用px布局会暗藏一个蛋疼的问题,就是当用户和Ctrl滚 ...
- Android MVVM框架RoboBinding初探
RoboBinding是一个实现了数据绑定 Presentation Model(MVVM) 模式的Android开源框架.MVVM模式是MVC模式的重要更新,使得项目结构更加的优美,易于维护以及方便 ...
- WebRTC手记之本地视频采集
转载请注明出处:http://www.cnblogs.com/fangkm/p/4374610.html 前面两篇文章介绍WebRTC的运行流程和使用框架接口,接下来就开始分析本地音视频的采集流程.由 ...
- COJ968 WZJ的数据结构(负三十二)
WZJ的数据结构(负三十二) 难度级别:D: 运行时间限制:5000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 给你一棵N个点的无根树,边上均有权值,每个点上有 ...
- Html - Bootstrap 头部
<div class="container"> <div class="row clearfix"> <div class=&qu ...
- 通过Sysprep封装系统
<?xml version="1.0" encoding="utf-8"?> <unattend xmlns="urn:schema ...
- 提取安卓手机的recovery
一直都是从网上下载的recovery文件安装到手机.至于这个小小的recovery到底是什么全然不知.能不能自己做一个recovery呢?因为功能比较多的clockworkmod(简称cmw)的官网上 ...
- anisotropy texture filtering
http://www.extremetech.com/computing/51994-the-naked-truth-about-anisotropic-filtering 1. 为什么在纹理采样时需 ...