前两天看了一个朋友做的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数据原型的建立以及基本处理,希望能帮到大家
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。