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注释的使用