zoukankan      html  css  js  c++  java
  • 如何使用mongodb(建立原型,连接数据库)

      前两天看了一个朋友做的mongodb数据库,他是自己从某网络大学试听课学的,从可读性和模块区分方面做的比较差,所以写下此文,以作交流.

      首先是创建一个modules文件夹,这里面用来存放mongodb数据原型,把user,admin等数据暴露给index.js.以下做示例

      先创建一个user原型

    const mongoose = require('mongoose');
    const Schema = mongoose.Schema;
    const UserSchema = new Schema({ //用户名(必传),密码(必传),头像(必传),电话,邮箱
      username: {
        type: String,
        required: true
      },
      password: {
        type: String,
        required: true
      },
      coverImg: {
        type: String,
        required: true
      },
      phone: Number,
      email: String,
    }, {
      timestamps: true
    })
    const User = mongoose.model('user', UserSchema);
    module.exports = User;//暴露User

      创建完成需要的原型之后,全部引入到index.js文件中

    const mongoose = require('mongoose');
    const ProductType = require('./products_type');
    const Product = require('./products');
    const User = require('./user');
    const Star = require('./star');
    const Comment = require('./comment'); //评论
    const Admin = require('./admin');
    
    
    //本地数据库
    
    // mongoose.connect('mongodb://localhost:27017/test', {
    //     useNewUrlParser: true
    //   })
    //   .then(
    //     console.log('连接本地服务器成功')
    //   ).catch(err => console.log(err));
    
    
    // 远程数据库
    const uri = "mongodb+srv://管理员:密码@cluster0-3jl2x.mongodb.net/test?retryWrites=true";
    mongoose.connect(uri, {
        useNewUrlParser: true,
        dbName: '数据库名称'
    })
    .then(() => {
        console.log('连接远程数据库成功')
    })
    .catch(err => console.log(err));
    
    module.exports = {
      ProductType,
      Product,
      User,
      Star,
      Comment,
      Admin,
    }

      之后就是在routes文件夹中对路由进行设置,以admin为例,该文件处于routes>api>v1>admin>index.js

      

    // get post put delete
    const router = require('express').Router();
    const bcrypt = require('bcryptjs');//加密
    const { ProductType,Admin } = require('../../../../modules');
    const jwt = require('jsonwebtoken'); // 对jwt数据进行加密处理
    const {
      jwtSecret,adminId
    } = require('../../../../utils/config');//引入密令,超级管理员id
    
    
    router.post('/admin_reg', async (req, res) => { //注册管理员
    
      const token = req.headers.authorization.split(' ')[1]; // 获取token
      const decoded = jwt.verify(token, jwtSecret);
      const {
        userId
      } = decoded;
      if (userId != adminId) {
        res.json({
          status: "error",
          info: "超级管理员才有注册权限"
        })
        return;
      }
      if (!req.body.username) {
        res.json({
          status: 'error',
          info: '用户名不能为空'
        })
        return;
      }
      const userCount = await Admin.countDocuments({
        username: req.body.username
      })
    
      if (userCount > 0) {
        res.json({
          status: 'error',
          info: '用户名已存在'
        })
      } else {
        try {
          var user = req.body;
          // 用户密码加密处理
          const salt = bcrypt.genSaltSync(10);
          const pwd = bcrypt.hashSync(req.body.password, salt);
          user.password = pwd;
          const admin = new Admin(user);
          const result = await admin.save()
          res.json({
            status: 'success',
            info: '注册成功' + result
          })
        } catch (err) {
          res.json({
            status: 'error',
            info: err
          })
        }
    
      }
    })
    
    
    
    //查询管理员信息
    router.get('/manager_info', async (req, res, next) => {
      try {
        const token = req.headers.authorization.split(' ')[1]; // 获取token
        const decoded = jwt.verify(token, jwtSecret);
        const {
          userId
        } = decoded;
        const user = await Admin.findById(userId);
        res.json(user);
      } catch (err) {
        next(err);
      }
    })
    
    
    router.delete('/delete', async (req, res) => { //删除管理员
      try {
    
        const token = req.headers.authorization.split(' ')[1]; // 获取token
        const decoded = jwt.verify(token, jwtSecret);
        const {
          userId
        } = decoded;
        if (userId != adminId) {
          res.json({
            status: "error",
            info: "只有超级管理员才有删除管理员权限"
          })
          return;
        }
        if (!req.query.username) {
          res.json({
            status: 'error',
            info: '用户名不能为空'
          })
          return;
        }
        const check = await Admin.findOne({
          username: req.query.username
        })
        if (check == null) {
          res.json({
            status: 'error',
            info: '未查询到该管理员'
          })
          return;
        }
        if (check.id == adminId) {
          res.json({
            status: 'error',
            info: '无法删除超级管理员'
          })
          return;
        }
        await Admin.deleteOne({
          username: req.query.username
        });
        res.json({
          status: 'success',
          info: "删除成功"
        })
      } catch (err) {
        res.json({
          status: 'error',
          info: err
        })
      }
    })
    
    
    
    module.exports = router;

      以上就是对于mongodb数据原型的建立以及基本处理,希望能帮到大家

      

  • 相关阅读:
    第十三次ScrumMeeting会议
    第十二次ScrumMeeting博客
    第十一次ScrumMeeting会议
    Alpha阶段事后分析
    Alpha阶段展示
    Alpha阶段发布说明
    团队项目-第十次scrum 会议
    团队项目-第五次Scrum 会议
    # 团队项目测评博客
    # Beta冲刺前准备
  • 原文地址:https://www.cnblogs.com/gitByLegend/p/10714949.html
Copyright © 2011-2022 走看看