nodejs web应用服务器搭建(三):业务的实现+mongo的基础使用

前言

本章节主要是关注业务实现的,就是持久层数据的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术语/概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins表连接,MongoDB不支持
primary keyprimary key主键,MongoDB自动将_id字段设置为主键

你还需要了解数据库操作

  • 创建数据库
  • 删除数据库
  • 插入文档
  • 删除文档
  • 更新文档
  • 条件操作
  • $type操作
  • limit ship操作
  • 排序
  • 索引

你可以访问该网站查阅相关操作 如何使用 传送门

关于mongoose

一个JavaScript 的 mongoose ORM 库

mongoose 文档

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)
        })
});
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值