Node.js+mongodb 学习笔记(二)jwt+mongodb+swagger整合

Node.js+mongodb 学习笔记(二)jwt+mongodb+swagger整合

本节所讲内容都是再utils里面进行的封装,目录结构如下:
在这里插入图片描述

jwt-token验证

在前一篇中已经进行了相关依赖的添加,不知道的朋友请翻阅第一篇进行了解:Node.js+mongodb 学习笔记(一)安装环境+创建项目
1.自定义常量
在utils文件夹创建constant.js文件,项目中的使用到的常量在这里进行声明

 module.exports={
     //请求响应失败code码
     CODE_ERROE:-1,
     //请求响应成功code码
     CODE_SUCCESS:200,
     //授权失败
     CODE_TOKEN_EXPIRED:401,
     //自定义jwt加密密钥
     PRIVATE_KEY:'abcdefg',
     //过期时间
     JWT_EXPIRED:60*60*24
 }

在这里插入图片描述
2.jwt-token验证和解析方法
在utils下创建jwt文件夹,在jwt文件夹里创建jwt.js文件

const jwt = require('jsonwebtoken'); //引入jsonwebtoken模块
const expressJwt= require('express-jwt');//引入express-jwt模块
const {PRIVATE_KEY} = require('../constant');//引入自定义jwt加密密钥
 
//验证token是否过期
const jwtAuth = expressJwt({
    secret:PRIVATE_KEY,//设置密钥
    algorithms:['HS256'],
    credentialsRequired:true,//true表示校验,false表示不校验
    getToken:(req)=>{//自定义获取token函数
        if(req.headers.authorization){
            return req.headers.authorization
        }else if(req.query &&req.query.token){
            return req.query.token
        }
    }
}).unless({//设置jwt白名单,不需要校验token
    path:[
        '/',
        '/users/login',
        '/users/register',
        '/users/resetPwd'
    ]
})

//jwt-token解析
function decode(req){
    const token = req.getToken('Authorization')
    return jwt.verify(token,PRIVATE_KEY);
}

module.exports={
    jwtAuth,
    decode
}

在这里插入图片描述

mongodb封装

在utils下创建mongodb文件夹,在mongodb文件夹里创建db.js文件。首先需要在mongdb数据库里创建:“productmanager”数据库

var MongoClient = require('mongodb').MongoClient;//引入mongodb数据库模块
var DbUrl = 'mongodb://127.0.0.1:27017/productmanage'; //连接数据库的url
var ObjectID = require('mongodb').ObjectID;

//连接数据库方法
function connectDb(callback){
    MongoClient.connect(DbUrl, function(err,db){
        if(err){
            console.log(err);
            console.log('数据库连接失败');
            return;
        }
       callback(db);
    })
}

//暴露ObjectID
exports.ObjectID = ObjectID;

/**
 * collectionname: 表名
 * json:查询条件
 * callback: 返回查询的数据
 */
//查询数据
exports.find = function(collectionname,json,callback){
    connectDb(function(db){
        var dbs = db.db('productmanage')
        var result = dbs.collection(collectionname).find(json);
        result.toArray(function(error, data){
               /**关闭数据库连接 */
            callback(error, data); /**拿到数据,执行回调函数 */
            db.close();
        })
        
    })
}

//新增数据
exports.insert = function(collectionname,json,callback){
    connectDb(function(db){
        var dbs = db.db('productmanage')
        dbs.collection(collectionname).insertOne(json,function(error,data){
            callback(error,data);
            db.close();
        })
    })
}

//修改数据,json1为旧数据,josn2为新数据
exports.update = function(collectionname,json1,json2,callback){
   connectDb(function(db){
    var dbs = db.db('productmanage')
       dbs.collection(collectionname).update(json1,{$set:json2},function(error,data){
           callback(error,data);
       })
   })
}

//删除数据
exports.delete = function(collectionname,json,callback){
   connectDb(function(db){
    var dbs = db.db('productmanage')
       dbs.collection(collectionname).deleteOne(json,function(error,data){
           callback(error,data);
           db.close();
       })
   })
}

swagger的使用

在node.js中也是可以是用swagger的,在utils文件夹下创建swagger文件夹,在swagger文件夹里创建index.js文件

const path = require('path')
const express = require('express')
const swaggerUI = require('swagger-ui-express')
const swaggerDoc = require('swagger-jsdoc')

//配置swagger-jsdoc
const options = {
    definition: {
        openapi: '3.0.0',
        info: {
            title: 'api',
            version: '1.0.0',
            description: '后端接口api'
        }
    },
    //去哪个路由下收集swagger注释
    apis: [path.join(__dirname,'../../routes/*.js')]
}

var swaggerJson = function(req,res){
    res.setHeader('Content-Type','application/json');
    res.send(swaggerSpec);
}
const swaggerSpec = swaggerDoc(options)

var swaggerInstall = function(app) {
    if(!app){
        app = express()
    }
    //开放相关接口
    app.get('/swagger.json',swaggerJson);
    //使用swaggerSpec生成swagger文档页面,并开放再指定路由
    app.use('/swagger',swaggerUI.serve,swaggerUI.setup(swaggerSpec));
}
module.exports = swaggerInstall

然后需要在app.js中引入swagger中的方法

require("./utils/swagger")(app);

本篇到此结束,下一篇讲解用户的注册,登录,修改密码,包括swagger注释的使用

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值