鍵.png)
node.js + express + docker + mysql + jwt 實(shí)現(xiàn)用戶管理restful api
第一個接口 創(chuàng)建管理員
routes/setup.js
var express = require("express");
var User = require("../modules/user");
var router = express.Router();
router.get('/',function(req,res){
var admin = new User({
name:'zhoupeng1',
password:'12345',
admin:true
}) //創(chuàng)建一個管理員
admin.save(function(err){
if(err){
res.json({
success:false,
message:'管理員創(chuàng)建失敗'
});
}
res.json({success:true,message:"管理員創(chuàng)建成功"})
}) //加入數(shù)據(jù)庫,并判斷是否成功
})
module.exports = router; //導(dǎo)出路由
然后server.js中導(dǎo)入路由文件,添加下面兩句:
var setupRoute = require('./app/routes/setup');// 導(dǎo)入路由文件
app.use('/setup',setupRoute); //設(shè)置訪問路徑
測試:
routes/user.js
var express = require('express');
var app = express();//定義app
var User = require("../modules/user")
var jwt = require('jsonwebtoken');//用來創(chuàng)建和確認(rèn)用戶信息摘要
var config = require('../../config');
app.set('superSecret', config.secret); // 設(shè)置app 的超級密碼--用來生成摘要的密碼
var router = express.Router();
router.post('/login',function(req,res){
User.findOne({
name:req.body.name //根據(jù)用戶輸入用戶名進(jìn)行匹配
},function(err,user){ //登錄驗(yàn)證
if(err){
res.json({success:false,message:"登錄失敗"});
};
if(!user){
res.json({success:false,message:"認(rèn)證失敗,用戶名找不到"});
}else if(user){
if(user.password != req.body.password){
res.json({success:false,message:"認(rèn)證失敗,密碼錯誤"});
}else{
var token = jwt.sign({name:'foo'},app.get('superSecret'));//獲取token
res.json({
success:true,
message:"恭喜,登錄成功",
token:token
})
}
}
})
})
然后server.js中導(dǎo)入路由文件,添加下面兩句:
var userRoute = require('./app/routes/user');// 導(dǎo)入路由文件
app.use('/user',userRoute); //設(shè)置訪問路徑
測試:
routes/category.js
var express = require('express');
var Category = require('../modules/category')
var router = express.Router();
// 添加分類
router.post('/',function(req,res){
var title = req.body.title;
console.log(req);
var category = new Category({
title:title
})
category.save(function(err){
if(err){
res.json({
success:false,
message:"添加分類成功!"
})
}
})
res.json({success:true,message:"添加分類成功!"})
})
// 查看所有分類
router.get('/',function(req,res){
Category.find({},function(err,categories){
res.json({
success:true,
data:categories
})
})
})
// 更新分類
router.put('/',function(req,res){
// 解構(gòu)賦值
var {title,newTitle} = req.body;
Category.findOneAndUpdate({title:title},{title:newTitle},function(err,category){
if(err){
res.json({
success:false,message:"更新分類失敗"
})
}
})
res.json({success:true,message:"更新分類成功!"})
})
// 刪除分類
router.delete('/',function(req,res){
console.log('delete category');
// 解構(gòu)賦值
var {title} = req.body;
Category.remove({title:title},function(err){
if(err){
res.json({
success:false,messge:"刪除分類成功!"
})
}
})
res.json({success:true,message:"刪除分類成功!"})
})
module.exports = router;
然后server.js中導(dǎo)入路由文件,添加下面兩句:
var categoryRoute = require('./app/routes/category');// 導(dǎo)入路由文件
app.use('/category',categoryRoute); //設(shè)置訪問路徑
測試添加分類,查詢分類:
測試更新分類 首先多添加幾條數(shù)據(jù),便于查看:
測試刪除分類:
routes/blog.js
var express = require("express");
var Blog = require("../modules/blog");
var router = express.Router();
// 顯示所有博客
router.get('/',function(req,res){
// 根據(jù)分類查找
var {category} = req.query;
var whereObj = {};
if(category){
var reg = new RegExp('^'+category+'$');
whereObj = {category:reg}
}
//var reg = new RegExp('^'+category+'$')與/^category$/的區(qū)別
//前者中的category是拼接上的一個變量,是動態(tài)的,
//后者是靜態(tài)的只能匹配'category'這個內(nèi)容
Blog.find(whereObj,function(err,blogs){
res.json({
success:true,
data:blogs
})
})
})
// 發(fā)布博客
router.post('/',function(req,res){
// 結(jié)構(gòu)賦值
var {title,body,author,tags,hidden,category} = req.body;
console.log(title);
if(title.length<3){
res.json({
success:false,
message:"標(biāo)題長度不能小于3"
})
}
// 標(biāo)簽格式應(yīng)該是對象數(shù)組
// 把標(biāo)簽分割成數(shù)組格式
var tagsArray = tags.split(",");
// 新建一個空數(shù)組,用來放對象
var tagsObjArray = [];
// 通過遍歷的方式,把標(biāo)簽內(nèi)容放入對象里面,通過push方式
tagsArray.forEach(function(v){
tagsObjArray.push({title:v});
})
var blog = new Blog({
title,
body,
author,
tags:tagsObjArray,
hidden,
category
});
blog.save(function(err){
if(err){
res.json({success:false,messafe:"博客發(fā)布失敗"})
};
res.json({success:true,message:"博客發(fā)布成功"})
})
})
// 修改博客
router.put('/',function(){
var {title,newTitle,body,newBody,author,newAuthor} = req.body;
if(newTitle.length<3){
res.json({
success:false,
message:"標(biāo)題長度不能小于3"
})
}
blog.update({
title:title,
body:body,
author:author
},{
title:newTitle,
body:newBody,
author:newAuthor
},function(err,blog){
if(err){
res.json({
success:false,
message:"更新博客失敗"
})
}
});
res.json({
success:true,
message:"更新博客成功"
})
})
// 刪除博客
router.delete('/',function(req,res){
// 解構(gòu)賦值
var {title} = req.body;
Blog.remove({
title:title,
},function(err){
if(err){
res.json({
success:false,messge:"刪除博客失??!"
})
}
})
res.json({success:true,message:"刪除博客成功!"})
})
module.exports = router;
然后server.js中導(dǎo)入路由文件,添加下面兩句:
var blogRoute = require('./app/routes/blog');// 導(dǎo)入路由文件
app.use('/blog',blogRoute); //設(shè)置訪問路徑
本文章轉(zhuǎn)載微信公眾號@SegmentFault思否
node.js + express + docker + mysql + jwt 實(shí)現(xiàn)用戶管理restful api
表格插件wpDataTables-將 WordPress 表與 Google Sheets API 連接
手把手教你用Python和Flask創(chuàng)建REST API
使用 Django 和 Django REST 框架構(gòu)建 RESTful API:實(shí)現(xiàn) CRUD 操作
ASP.NET Web API快速入門介紹
2024年在線市場平臺的11大最佳支付解決方案
完整指南:如何在應(yīng)用程序中集成和使用ChatGPT API
選擇AI API的指南:ChatGPT、Gemini或Claude,哪一個最適合你?
用ASP.NET Core 2.1 建立規(guī)范的 REST API — 緩存和并發(fā)