前言
本章节主要是关注业务实现的,就是持久层数据的CURD操作,和业务处理。
资料:
mongoose 文档
其他章节链接:
nodejs web应用服务器搭建(一):跑起你的服务器
nodejs web应用服务器搭建(二):express 框架说明(应用)
nodejs web应用服务器搭建(三):业务的实现+mongo的基础使用
nodejs web应用服务器搭建(四):生产环境的搭建
介绍mongoDB
简介
mongoDB属于noSQL型(即非关系型的数据库)数据库,而mongoDB属于文档类型,使用的简易程度远超于传统数据库,所以前端转后端时可以以noSQL类型作为切入点,但传统数据库还是拥有非常大的优势的,技术选型还是需要根据具体业务来决定,毕竟 技术脱离业务 就一文不值了。接下来不过多介绍了,进入正题。
mongodb 的安装使用。
首先先去mongoDB 官网,根据你的系统下载安装程序 传送门
1. 选择自定义安装
2.选择你需要安装的目录
安装完以后可以先查看一下环境变量,win + R ,输入CMD,命令行模式输入 path,确定是否存在 %你的mongoDB安装路径%/bin 改 地址,如果没有请在环境变量自行添加
3.创建你的数据目录
你可以在任意目录下创建你的数据目录,如 c:/data/db
4. 启动你的mongoDB
可以在命令台输入 mongod –port 10086 –dbpath 你的数据目录(如上述:c:/data/db)
如果出现下面信息,那就已经可以正常使用mongoDB了
2018-02-17T16:41:46.651+0800 I CONTROL [initandlisten] MongoDB starting : pid=13264 port=10086 dbpath=C:/data/db 64-bit host=surface-book
2018-02-17T16:41:46.652+0800 I CONTROL [initandlisten] targetMinOS: Windows Vista/Windows Server 2008
2018-02-17T16:41:46.653+0800 I CONTROL [initandlisten] db version v3.2.10
2018-02-17T16:41:46.653+0800 I CONTROL [initandlisten] git version: 79d9b3ab5ce20f51c272b4411202710a082d0317
2018-02-17T16:41:46.653+0800 I CONTROL [initandlisten] allocator: tcmalloc
2018-02-17T16:41:46.654+0800 I CONTROL [initandlisten] modules: none
2018-02-17T16:41:46.654+0800 I CONTROL [initandlisten] build environment:
2018-02-17T16:41:46.657+0800 I CONTROL [initandlisten] distarch: x86_64
2018-02-17T16:41:46.658+0800 I CONTROL [initandlisten] target_arch: x86_64
2018-02-17T16:41:46.659+0800 I CONTROL [initandlisten] options: { net: { port: 10086 }, storage: { dbPath: "C:/data/db" } }
2018-02-17T16:41:46.662+0800 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=4G,session_max=20000,eviction=(threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0),
2018-02-17T16:41:46.854+0800 I NETWORK [HostnameCanonicalizationWorker] Starting hostname canonicalization worker
2018-02-17T16:41:46.854+0800 I FTDC [initandlisten] Initializing full-time diagnostic data capture with directory 'C:/data/db/diagnostic.data'
2018-02-17T16:41:46.895+0800 I NETWORK [initandlisten] waiting for connections on port 10086
mongodb 的使用说明
你需要了解一下关于mongodb的操作,和数据库术语/概念
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
你还需要了解数据库操作
- 创建数据库
- 删除数据库
- 插入文档
- 删除文档
- 更新文档
- 条件操作
- $type操作
- limit ship操作
- 排序
- 索引
你可以访问该网站查阅相关操作 如何使用 传送门
关于mongoose
一个JavaScript 的 mongoose ORM 库
express的业务中间件
mongo配置
通过 mongoose 链接mongoDB,每次调用modal都会创建链接
// ./modal/config.js
var mongoose = require('mongoose');//引入mongoose库
mongoose.connect('mongodb://localhost:10086/logs');//mongodb连接地址,demo为数据库名称,默认mongodb连接不需要密码
exports.mongoose = mongoose;//导出mongoose对象
建立modal
基础modal 模块
// ./modal/base.js
var mongodb = require('./config');//引入config中的mongodb对象
var mongoose = mongodb.mongoose;//获取mongoose
var Schema = mongoose.Schema;//获取Schema,以便快捷使用
var ObjectId = Schema.Types.ObjectId;//获取ObjectId类型,以便快捷使用
exports.mongodb = mongodb;//导出mongodb
exports.mongoose = mongoose; //导出mongoose
exports.Schema = Schema;//导出Schema
exports.ObjectId = ObjectId;//导出ObjectId
exports.Mixed = Schema.Types.Mixed;//导出Mixed
日志modal
// ./modal/log.js
var base = require('./Base');
var ObjectId = base.ObjectId;
var logScheme =new base.Schema({
host:{
type:'String',
required:true
},
path:{
type:'String',
required:true
},
msg:String,
file:String,
stack:String,
userAgent:String,
//date:String,
createTime:{type:Date,default:Date.now}//创建时间
});
logScheme.index({createTime:1},{"background" : true});//设置索引
var logEntity = base.mongoose.model('logEntity',logScheme,'logs');//指定在数据库中的collection名称为user
exports.logEntity = logEntity;//导出实体
mongoose的应用
路由中间件,处理 /logs 请求,此api功能为,日志记录查询
var express = require('express');
var fs = require('fs');
var router = express.Router();
var logEntity = require('../models/log').logEntity;
router.use('/logs', function(req, res, next) {
var count_per_page = 50,
page = 1,
start,
end;
if(req.method == 'GET'){
page = req.query.page || 1
start = req.query.start || Date.now() - 7 * 24 * 3600 * 1000;
end = req.query.end || Date.now();
}else if (req.method == 'POST'){
page = req.body.page || 1
start = req.body.start || Date.now() - 7 * 24 * 3600 * 1000;
end = req.body.end || Date.now();
}
res.header("Access-Control-Allow-Origin", "*");
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.header('Access-Control-Allow-Headers', 'Content-Type');
res.header('Access-Control-Allow-Credentials','true');
logEntity.find({ createTime:{ "$gte": new Date(start), "$lt":new Date(end)}}) // $条件查询
.select('-_id host file stack createTime msg userAgent path')
if (!error) {
throw new Error('error')
}
res.json(docs)
})
});
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/11523.html