当前位置:   article > 正文

node.js项目实战_nodejs项目实战

nodejs项目实战

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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

然后在项目根目录下的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;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

下一步管理员模块路由在项目根目录的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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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

在这里添加

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

在这里插入图片描述

在这里添加

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

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

开始干自定义的方法
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);
        }
    });
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55

除了登录页面外,访问其他页面均需要登陆状态,所以需要色剂一个令牌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{
       
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/118916?site
推荐阅读
相关标签
  

闽ICP备14008679号