nodejs web应用服务器搭建(三):业务的实现+mongo的基础使用详解编程语言

前言

本章节主要是关注业务实现的,就是持久层数据的CURD操作,和业务处理。
资料:
mongoose 文档
其他章节链接:

nodejs web应用服务器搭建(一):跑起你的服务器
nodejs web应用服务器搭建(二):express 框架说明(应用)
nodejs web应用服务器搭建(三):业务的实现+mongo的基础使用
nodejs web应用服务器搭建(四):生产环境的搭建

介绍mongoDB

简介

mongoDB属于noSQL型(即非关系型的数据库)数据库,而mongoDB属于文档类型,使用的简易程度远超于传统数据库,所以前端转后端时可以以noSQL类型作为切入点,但传统数据库还是拥有非常大的优势的,技术选型还是需要根据具体业务来决定,毕竟 技术脱离业务 就一文不值了。接下来不过多介绍了,进入正题。

mongodb 的安装使用。

首先先去mongoDB 官网,根据你的系统下载安装程序 传送门

1. 选择自定义安装
nodejs web应用服务器搭建(三):业务的实现+mongo的基础使用详解编程语言

2.选择你需要安装的目录
nodejs web应用服务器搭建(三):业务的实现+mongo的基础使用详解编程语言

安装完以后可以先查看一下环境变量,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 库

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) 
        }) 
});

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/11523.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论