node.js项目实战

本文介绍了一个基于Node.js的wish-admin-api项目实战,涵盖了从创建数据库表到实现11个功能模块的详细步骤,包括登录、许愿列表、管理员管理等功能。文章还提到了使用express、async、sequelize等库,并且介绍了Token验证和接口测试的过程。
摘要由CSDN通过智能技术生成

node.js项目实战

wish-admin项目
第一次写博客 不多说了 直接开干

首先创建管理员名单数据库表admin
在这里插入图片描述
在这里插入图片描述

命令行生成项目文件
express wish-admin-api

然后安装一下依赖包
npm install async -S mysql2 -S sequelize -S dateformat -S jsonwebtoken -S

修改一下端口号
在这里插入图片描述

明确我们要做的功能一下功能
1.登录
2.许愿列表
3.添加许愿
4.获取单条许愿信息
5.修改许愿信息
6.删除许愿信息
7.管理员列表
8.添加管理员
9.获取单条管理员信息
10.修改管理员信息
11.删除管理员信息
加起来一共11个路由
现来登录模块的路由

在这里插入图片描述

var express = require('express');//引入express对象
var router = express.Router();//引入路由对象


//引入自定义的controllers
var IndexController = require('../controllers/index')
router.post('/login',IndexController.login);//定义登录路由,post请求
module.exports = router;

然后在项目根目录下的routes目录下新建一个wish.js文件,用来存放许愿管理器模块路由
在这里插入图片描述

var express = require('express');
var router = express.Router(); //引入路由对象

//引入自定义的controller

const WishController = require ('../controllers/wish');
router.get('/',WishController.list); //定义许愿列表路由,get请求
router.get('/:id',WishController.info); //定义单条许愿路由,GET请求
router.post('/',WishController.add); //定义添加许愿路由, post请求
router.put('/',WishController.update); //定义修改许愿路由,put请求
router.delete('/',WishController.remove);//定义删除许愿路由,delete请求
module.exports = router;

下一步管理员模块路由在项目根目录的routes目录下新建一个admin.js文件

在这里插入图片描述

var express = require('express')
var router = express.Router();
//老样子引入controller
const AdminController = require ('../controllers/admin');
router.get('/',AdminController.list);
router.get('/:id',AdminController.info);
router.post('/',AdminController.add);
router.put('/',AdminController.update);
router.delete('/',AdminController.remove);

module.exports = router;

要想路由配置生效还需要在app.js,将定义的路由文件引进来进行path配置

在这里添加

var wishRouter = require('./routes/wish')
var adminRouter = require('./routes/admin')

在这里插入图片描述

在这里添加

app.use('/wish',wishRouter)
app.uee('/admin',adminRouter)

写完以后文件目录是这样的
在这里插入图片描述

开始干自定义的方法
common.js中的公共方法

//定义了三个公共方法克隆、校验、返回统一
const async = require('async');
const Constant = require('../constant/constant');
const exportObj = {
    clone,
    checkParams,
    autoFn
};

module.exports = exportobj;
//导出对象,方便其他方法调用
    // 克隆方法,克隆一个对象
    // @param obj
    // @returns {any}
function clone(obj){
    return JSON.parse(JSON.stringify(obj));
}

// 校验参数全局方法
// @param params 请求的参数集
// @param checkArr 需要验证的参数
// @param cb

function checkParams (params,checkArr,cb){
    let flag = true;
    checkArr.forEach(v =>{
        if(!params[v]){
            flag = false;
        }
    });
    if(flag){
        cb(null);
    }else{
        cb(Constant.LACK)
    }
}

// 返回同一方法 返回json格式数据
// @param tasks 当前controllers执行tasks
//@param res 当前controller responese
// @param resObj 当前controller返回json对象

function autoFn(tasks,res,resObj){
    async.auto(tasks,function(err){
        if(!!err){
            console.log(JSON.stringify(err));
            res.json({
                code:err.code || Constant.DEFAULT_ERROR.code,
                msg:err.msg || JSON.stringify(err)
            });
        }else{
            res.json(resObj);
        }
    });
}

除了登录页面外,访问其他页面均需要登陆状态,所以需要色剂一个令牌Token机制,在用户登录成功以后返回Token,前端将其保存,在请求后序接口时带上Token验证是否登录单独定义在Token.js文件中

const jwt = require('jsonwebtoken')
const tokenKey = 'XfzEpWEn?ARD7rHBN';//设置一个秘钥,用来加密和解密Token

const Token = {
    // Token加密方式
    // @param data 需要加密在Token中的数据
    // @param time Token 的过期时间,单位为s
    // @returns {*} 返回一个Token
    encrypt:function(data,time){
        return jwt.sign(data,tokenKey,{expiresIn: time})
    },
    // Token解密方法
    // @param token 加密之后的Token
    // @returns 返回对象
    // {
  {token: boolean (true表示Token合法,false则表示不合法),
    // data: *(解密出来的数据或错误信息)}}
    decrypt:function(token){
        try{
            let data =jwt.verify(token,tokenKey);
            return {
                token:true,
                data:data
            };
        }catch(e){
            return{
                token:false,
                data:e
            }
        }
    }
};

module.exports = Token;

初登陆页面以外 所有的页面都需要校验token,每个页面都需要校验,则万门我们将它放入单独封装到routes中的middleware目录下的verify.js文件中

//引入Token处理的controller
const Token = require('../../controllers/token')
const Constant = require (
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值