開始接口編寫

第一個接口 創(chuàng)建管理員

routes/setup.js

  1. var express = require("express");
  2. var User = require("../modules/user");
  3. var router = express.Router();
  4. router.get('/',function(req,res){
  5.    var admin = new User({
  6.        name:'zhoupeng1',
  7.        password:'12345',
  8.        admin:true
  9.    })      //創(chuàng)建一個管理員
  10.    admin.save(function(err){
  11.        if(err){
  12.            res.json({
  13.                success:false,
  14.                message:'管理員創(chuàng)建失敗'
  15.            });
  16.        }
  17.        res.json({success:true,message:"管理員創(chuàng)建成功"})
  18.    })          //加入數(shù)據(jù)庫,并判斷是否成功
  19. })
  20. module.exports = router; //導(dǎo)出路由

然后server.js中導(dǎo)入路由文件,添加下面兩句:

  1. var setupRoute = require('./app/routes/setup');// 導(dǎo)入路由文件
  2. app.use('/setup',setupRoute);   //設(shè)置訪問路徑

測試:

第二個接口 管理員登錄

routes/user.js

  1. var express = require('express');
  2. var app = express();//定義app
  3. var User = require("../modules/user")
  4. var jwt = require('jsonwebtoken');//用來創(chuàng)建和確認(rèn)用戶信息摘要
  5. var config = require('../../config');
  6. app.set('superSecret', config.secret); // 設(shè)置app 的超級密碼--用來生成摘要的密碼
  7. var router = express.Router();
  8. router.post('/login',function(req,res){
  9.    User.findOne({
  10.        name:req.body.name //根據(jù)用戶輸入用戶名進(jìn)行匹配
  11.    },function(err,user){   //登錄驗(yàn)證
  12.        if(err){
  13.            res.json({success:false,message:"登錄失敗"});
  14.        };
  15.        if(!user){
  16.            res.json({success:false,message:"認(rèn)證失敗,用戶名找不到"});
  17.        }else if(user){
  18.            if(user.password != req.body.password){
  19.                res.json({success:false,message:"認(rèn)證失敗,密碼錯誤"});
  20.            }else{
  21.                var token = jwt.sign({name:'foo'},app.get('superSecret'));//獲取token
  22.                res.json({
  23.                    success:true,
  24.                    message:"恭喜,登錄成功",
  25.                    token:token
  26.                })
  27.            }
  28.        }
  29.    })
  30. })

然后server.js中導(dǎo)入路由文件,添加下面兩句:

  1. var userRoute = require('./app/routes/user');// 導(dǎo)入路由文件
  2. app.use('/user',userRoute);   //設(shè)置訪問路徑

測試:

第三個接口 博客分類的增刪查改

routes/category.js

  1. var express = require('express');
  2. var Category = require('../modules/category')
  3. var router = express.Router();
  4. // 添加分類
  5. router.post('/',function(req,res){
  6.    var title = req.body.title;
  7.    console.log(req);
  8.    var category = new Category({
  9.        title:title
  10.    })
  11.    category.save(function(err){
  12.        if(err){
  13.            res.json({
  14.                success:false,
  15.                message:"添加分類成功!"
  16.            })
  17.        }
  18.    })
  19.    res.json({success:true,message:"添加分類成功!"})
  20. })
  21. // 查看所有分類
  22. router.get('/',function(req,res){
  23.    Category.find({},function(err,categories){
  24.        res.json({
  25.            success:true,
  26.            data:categories
  27.        })
  28.    })
  29. })
  30. // 更新分類
  31. router.put('/',function(req,res){
  32.    // 解構(gòu)賦值
  33.    var {title,newTitle} = req.body;
  34.    Category.findOneAndUpdate({title:title},{title:newTitle},function(err,category){
  35.        if(err){
  36.            res.json({
  37.                success:false,message:"更新分類失敗"
  38.            })
  39.        }
  40.    })
  41.    res.json({success:true,message:"更新分類成功!"})
  42. })
  43. // 刪除分類
  44. router.delete('/',function(req,res){
  45.    console.log('delete category');
  46.    // 解構(gòu)賦值
  47.    var {title} = req.body;
  48.    Category.remove({title:title},function(err){
  49.        if(err){
  50.            res.json({
  51.                success:false,messge:"刪除分類成功!"
  52.            })
  53.        }
  54.    })
  55.    res.json({success:true,message:"刪除分類成功!"})
  56. })
  57. module.exports = router;

然后server.js中導(dǎo)入路由文件,添加下面兩句:

  1. var categoryRoute = require('./app/routes/category');// 導(dǎo)入路由文件
  2. app.use('/category',categoryRoute);   //設(shè)置訪問路徑

測試添加分類,查詢分類:

測試更新分類 首先多添加幾條數(shù)據(jù),便于查看:

測試刪除分類: 

第四個接口,博客的編寫

routes/blog.js

  1. var express = require("express");
  2. var Blog = require("../modules/blog");
  3. var router = express.Router();
  4. // 顯示所有博客
  5. router.get('/',function(req,res){
  6.    // 根據(jù)分類查找
  7.    var {category} = req.query;
  8.    var whereObj = {};
  9.    if(category){
  10.        var reg = new RegExp('^'+category+'$');
  11.        whereObj = {category:reg}
  12.    }
  13.    //var reg = new RegExp('^'+category+'$')與/^category$/的區(qū)別
  14.    //前者中的category是拼接上的一個變量,是動態(tài)的,
  15.    //后者是靜態(tài)的只能匹配'category'這個內(nèi)容
  16.    Blog.find(whereObj,function(err,blogs){
  17.        res.json({
  18.            success:true,
  19.            data:blogs
  20.        })
  21.    })
  22. })
  23. // 發(fā)布博客
  24. router.post('/',function(req,res){
  25.    // 結(jié)構(gòu)賦值
  26.    var {title,body,author,tags,hidden,category} = req.body;
  27.    console.log(title);
  28.    if(title.length<3){
  29.        res.json({
  30.            success:false,
  31.            message:"標(biāo)題長度不能小于3"
  32.        })
  33.    }
  34.    // 標(biāo)簽格式應(yīng)該是對象數(shù)組
  35.    // 把標(biāo)簽分割成數(shù)組格式
  36.    var tagsArray = tags.split(",");
  37.    // 新建一個空數(shù)組,用來放對象
  38.    var tagsObjArray = [];
  39.    // 通過遍歷的方式,把標(biāo)簽內(nèi)容放入對象里面,通過push方式
  40.    tagsArray.forEach(function(v){
  41.        tagsObjArray.push({title:v});
  42.    })
  43.    var blog = new Blog({
  44.        title,
  45.        body,
  46.        author,
  47.        tags:tagsObjArray,
  48.        hidden,
  49.        category
  50.    });
  51.   blog.save(function(err){
  52.       if(err){
  53.           res.json({success:false,messafe:"博客發(fā)布失敗"})
  54.       };
  55.       res.json({success:true,message:"博客發(fā)布成功"})
  56.   })
  57. })
  58. // 修改博客
  59. router.put('/',function(){
  60.    var {title,newTitle,body,newBody,author,newAuthor} = req.body;
  61.    if(newTitle.length<3){
  62.        res.json({
  63.            success:false,
  64.            message:"標(biāo)題長度不能小于3"
  65.        })
  66.    }
  67.    blog.update({
  68.        title:title,
  69.        body:body,
  70.        author:author
  71.    },{
  72.        title:newTitle,
  73.        body:newBody,
  74.        author:newAuthor
  75.    },function(err,blog){
  76.        if(err){
  77.            res.json({
  78.                success:false,
  79.                message:"更新博客失敗"
  80.            })
  81.        }
  82.    });
  83.    res.json({
  84.        success:true,
  85.        message:"更新博客成功"
  86.    })
  87. })
  88. // 刪除博客
  89. router.delete('/',function(req,res){
  90.    // 解構(gòu)賦值
  91.    var {title} = req.body;
  92.    Blog.remove({
  93.        title:title,
  94.    },function(err){
  95.        if(err){
  96.            res.json({
  97.                success:false,messge:"刪除博客失??!"
  98.            })
  99.        }
  100.    })
  101.    res.json({success:true,message:"刪除博客成功!"})
  102. })
  103. module.exports = router;

然后server.js中導(dǎo)入路由文件,添加下面兩句:

  1. var blogRoute = require('./app/routes/blog');// 導(dǎo)入路由文件
  2. app.use('/blog',blogRoute);   //設(shè)置訪問路徑

本文章轉(zhuǎn)載微信公眾號@SegmentFault思否

上一篇:

Asp.Net Core 5 REST API

下一篇:

node.js + express + docker + mysql + jwt 實(shí)現(xiàn)用戶管理restful api
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊

多API并行試用

數(shù)據(jù)驅(qū)動選型,提升決策效率

查看全部API→
??

熱門場景實(shí)測,選對API

#AI文本生成大模型API

對比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個渠道
一鍵對比試用API 限時免費(fèi)

#AI深度推理大模型API

對比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費(fèi)