阅读 105

mongodb + node + vue 实现前后台分离

八月的前奏就是狮子座,那八月的尾巴还是处女座嘞,今天是八月的最后一天,决定在自己脑子清醒的时候,抓住八月的尾巴,抓紧时间写一篇经典有用瞎折腾的博客,最近可真的是太忙啦,从上篇文章的朋友结婚,到接老妈来京,再到青海之游,再到朋友周末来访,简直安排的满满。不过真的很充实。有的朋友就该问了,朋友结婚你瞎忙什么啊,哈哈哈哈哈别瞎想啊,俺可是伴郎团内的颜值担当呦。不像别人说就我怎么也能当伴郎???我也是满脸问号啦!还有出去游玩虽然感冒,虽然第一天天公不作美,虽然很冷,有那么虽然,但是我们很开心,终于没有留下遗憾。目前就是希望时间慢一些慢一些慢一些......好了废话不说了,最近偷功夫赶紧折腾一下吧。sql学习不知道成本有多大,但是还是不想走常规之路,我想搞一下mongodb,先牛刀小试一把,打算用mongodb+ node +vue 搞个登陆的小demo。来吧,展示!

  • mongodb安装

    1. 手动mac安装mongodb

      手动安装mongodb 去某度上一搜一大把,这个我不想多提,按照上边写的一步一步来就行了。

    2. brew安装mongodb

      用brew安装mongodb可是走了一个大坑

      • brew install mongodb
        复制代码

        结果报错,找不到mongodb,网上需找原因,MongoDB不再开源,不能用上面的命令直接安装了,不过还是可以用brew安装的

      • brew tap mongodb/brew
        brew install mongodb-community@4.4
        复制代码

        安装成功了,启动和停止服务

      • brew services start mongodb-community
        brew services stop mongodb-community
        复制代码

        配置文件路径:/usr/local/etc/mongod.conf log文件路径:/usr/local/var/log/mongodb/mongo.log data目录路径:/data/db bin目录路径:/usr/local/Cellar/mongodb-community/4.2.6/bin

      • 值得注意的是,使用brew安装MongoDB不需要添加PATH环境变量,通过brew安装的软件,默认安装在/usr/local/Cellar/目录下,执行brew list 可以查看所有通过brew安装的软件:

    3. 设置账号和密码

      • show dbs   //查看所有数据库 
        复制代码
      • use admin  // 进入admin数据库,安装完mongodb初始有一个System和一个congfig数据库
        复制代码
      • db.createUser({ user: "admin", pwd: "password", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
        // 创建管理员账户,mongodb中的用户是基于身份role的,该管理员账户的 role是 userAdminAnyDatabase。admin用户用于管理账号,不能进行关闭数据库等操作。
        复制代码
      • db.createUser({user: "root",pwd: "password", roles: [ { role: "root", db: "admin" } ]})
        //创建完admin管理员,创建一个超级管理员root。角色:root。root角色用于关闭数据库。
        db.shutdownServer()
        复制代码
      • use yourdatabase  //进入你自己的数据库
        db.createUser({user: "user",pwd: "password",roles: [ { role: "dbOwner", db: "yourdatabase" } ]})
        //role: "dbOwner"代表数据库所有者角色,拥有最高该数据库最高权限。比如新建索引等当账号管理员和超级管理员,可以为自己的数据库创建用户了。(坑)这时候一定,一定要切换到所在数据库上去创建用户,不然创建的用户还是属于admin。
        复制代码
      • use admin
        db.auth("admin","password")
        //删除单个用户
        db.system.users.remove({user:"XXXXXX"})
        //删除所有用户
        db.system.users.remove({})
        复制代码
    4. 连接mongodb数据库

      • mongo  // 坑坑坑 找了好久的网上说的命令,最后还是的自己看英文的文档,还是英文文档比较靠谱
        复制代码
      • > use xxx    数据名
        switched to db xxx 
        > db
        xxx
        > 
        复制代码
      • show dbs
        // 可以看到并没有新建的数据库
        // 新建的数据库需要向新建的数据库中插入数据才能显示出来
        复制代码
      • db.xxx.insert({"name":"yuhior"})   // 
        复制代码
    5. 可视化工具Robo T3 这个有点类似于mysql 的可视化工具navact,其实也没有什么就是可以看到数据

  • node连接mongodb

    1. 安装node 吧我使用的koa2的脚手架

      npm install -g koa-generator
      复制代码
    2. 创建项目文件目录

      koa2 --hbs koa2-zcls   // handlebars 模版
      复制代码
    3. 安装依赖

      npm install 
      复制代码
    4. 目录结构 自己增加一个db文件夹

      --bin
      	--www
      --db
      	--db.js
      	--index.js
      --node_modules
      --public
      	--images
      	--javascripts
      	--stylesheets
      --routes
      	--index.js
      	--users.js
      --views
      	--error.hbs
      	--index.hbs
      	--layout.hbs
      --app.js
      package.json
      package-lock.json
      复制代码
    5. 使用mongoose进行数据库连接

      安装mongoose库

      npm install mongoose --save-dev
      复制代码
    6. db目录下db.js上代码 先导出mongoose扩展模块 ,该模块进行连接数据库 连接异常 断开连接等扩展

      const mongoose = require('mongoose');
      
      // 连接
      const DB_URL = 'mongodb://localhost:27017/myBlog'
      
      mongoose.connect(DB_URL)
      
      mongoose.connection.on('connected',function(){
          console.log('Mongoose connection open to ' + DB_URL);
      })
      
      /**
       * 链接异常error 数据库链接错误
       */
      
      mongoose.connection.on('erroe',function(err){
          console.log('Mongoose connection disconnected');
      })
      
      /**
       * 连接断开disconnected 连接异常断开
       */
      mongoose.connection.on('disconnected',function(){
      
      })
      
      
      module.exports = mongoose 
      复制代码
    7. db的index.js ,定义查询和保存方法

      const mongoose = require('./db');
      const { model ,Schema} = require('mongoose');
      //const Schema = mongoose.Schema;
      const ceshiSchema = new Schema({
          title: String,
          body:String,
          date:Date
      },{ collection: 'ceshi' })
      const MyModel = mongoose.model('ceshi', ceshiSchema);
      class Mongodb {
          constructor(){
      
          }
          // 查询
          query () { 
              return new Promise((resolve,reject)=>{
                  MyModel.find({},(err,res)=>{
                      if (err) {
                          reject(err)
                      }
                      resolve(res)
                  })
              })
          }
          // 保存
          save(obj){
              const m = new MyModel(obj)
              return new Promise((resolve,reject)=>{
                  m.save((err,res)=>{
                      if (err) {
                          reject(err)
                      }
                      resolve(res)
                      console.log(res)
                  })
              })
          }
      }
      module.exports = new Mongodb()
      复制代码
    8. routes/index.js中进行定义接口

      const ModelDb  = require('./../db');
      outer.get('/mongotest',async(ctx,next)=>{
        let data = await ModelDb.query()
        ctx.body = data
      })
      复制代码

  • 欲知后事如何且听先回分解 下一章应该会讲vue请求弄的接口,功力不够还需要来回折腾啊,和自己性格一样想走就走想做就做。

文章分类
前端
文章标签