在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 中看到有这个值: 在前后端分离项目中,存在跨域问题, ...
随机推荐
- 水题 ZOJ 3876 May Day Holiday
题目传送门 /* 水题:已知1928年1月1日是星期日,若是闰年加1,总天数对7取余判断就好了: */ #include <cstdio> #include <iostream> ...
- 素数环问题[XDU1010]
Problem 1010 - 素数环问题 Time Limit: 1000MS Memory Limit: 65536KB Difficulty: Total Submit: 972 Acc ...
- BZOJ3750 : [POI2015]Pieczęć
枚举第一个位置,然后暴力检验. #include<cstdio> #define N 1010 int T,n,m,a,b,x,y,i,j,k,q[N*N][2],cnt;char s[N ...
- javascript中字符串常用操作总结、JS字符串操作大全
字符串的操作在js中非常频繁,也非常重要.以往看完书之后都能记得非常清楚,但稍微隔一段时间不用,便会忘得差不多,记性不好是硬伤啊...今天就对字符串的一些常用操作做个整理,一者加深印象,二者方便今后温 ...
- [Unity2D]精灵
精灵是Unity2D里面对通过图片纹理实现的游戏对象,通常会是游戏里面的玩家,敌人之类的,在Unity里面创建一个精灵的操作非常简单,直接把图片资源拖放到Hierarachy视图就可以完成了精灵的创建 ...
- 【BZOJ】1180: [CROATIAN2009]OTOCI & 2843: 极地旅行社(lct)
http://www.lydsy.com/JudgeOnline/problem.php?id=1180 今天状态怎么这么不好..................................... ...
- JS中Date对象getYear()方法和getFullYear()方法区别
释义 JavaScript getFullYear() 方法 getFullYear() 方法可返回一个表示年份的 4 位数字. getYear() 语法 dateObject.getFullYear ...
- SSH整合配置二级缓存
一.了解 Hibernate的session提供了一级缓存,每个session,对同一个id进行两次load,不会发送两条sql给数据库,但session关闭时,一级缓存失效. 二级缓存是Sessio ...
- FLTK 1.3.3 MinGW 4.9.1 Configuration 配置
Download FLTK 1.3.3 Download CMake 3.2.0 Start CMake 3.2.0, fill the source and destination: source: ...
- java语言中一些使用的小技巧(区别于c++)
正在自学java中...想记录下java和c++在一些小的方面的不同点.(未完待续...) java中class的对象均是引用类型的,如果想把连个同类型的对象相关联起来,只要将一个赋值给另一个就可以了 ...