vue3+nodejs写登录接口

mongod.exe --dbpath + db路径

/routes/UserRouter.js

const express = require('express');
const router = express.Router();

const UserControllers = require('../../controllers/admin/UserControllers')


// 登录
router.post('/adminapi/user/login', UserControllers.login);

module.exports = router;

创建jwt

/util/jwt.js

// 生成token
const jsonwebtoken = require('jsonwebtoken');
const secret = '22222';

const jwt = {
    // 生成token
    generate(user, expires) {
        return jsonwebtoken.sign(user, secret, { expiresIn: expires })
    },
    // 验证token
    verify(token) {
        try {
            return jsonwebtoken.verify(token, secret);
        } catch (error) {
            return false
        }
    },
}

module.exports = jwt;

创建模型 约束返回数据类型

/models/UserModel.js

const mongoose = require('mongoose');

const Schema = mongoose.Schema;

const UserType = ({
    username: String,
    password: String,
    sex: Number,         //性别 0,1,2
    introduct: String,
    role: Number,
    avatar: String       //管理员  1,0
})

// 会将数据放在数据库的users集合里面
const UserModel = mongoose.model('users', new Schema(UserType))

module.exports = UserModel;

创建控制器  返回接口请求的数据

/controllers/UserControllers.js

const UserService = require('../../services/admin/UserService');
const jwt = require('../../util/jwt');

const UserControllers = {
    // 登录
    login: async (req, res) => {
        // 去数据库里查询输入的用户名和密码是否存在,返回一个数组
        const result = await UserService.login(req.body);

        if (result.length == 0) {
            res.send({
                code: '-1',
                error: '用户名或密码错误',
            })
        } else {
            // 通过用户名,密码,生成唯一的一个token
            const token = jwt.generate({
                _id: result[0]._id,
                username: result[0].username,
                password: result[0].password
            }, '1d');
            
            // 请求接口
            res.header('Authorization', token);

            // 请求返回的数据
            res.send({
                ActionType: 'ok',
                data: {
                    _id: result[0]._id,
                    username: result[0].username,
                    sex: result[0].sex ? result[0].sex : 0,
                    introduct: result[0].introduct,
                    avatar: result[0].avatar,
                    role: result[0].role
                }
            })
        }
    },
}

module.exports = UserControllers;

创建服务  对数据库进行增删改查

/services/UserService.js

const UserModel = require('../../models/UserModel');

const UserService = {
    login: async ({ username, password }) => {
        return UserModel.find({ username, password });
    },
}

module.exports = UserService;

app.js

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

// 需要添加的代码  start
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var UsersRouter = require('./routes/admin/UserRouter');

const jwt = require('./util/jwt');
// 需要添加的代码  end

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

// 需要添加的代码  start
app.use('/', indexRouter);
app.use('/users', usersRouter);

app.use((req, res, next) => {
  if (req.url === '/adminapi/user/login') {
    next();
    return;
  } else {
    // 获取token
    const token = req.headers["authorization"].split(' ')[1];
    if (token) {
      // 验证token
      var payload = jwt.verify(token);
      if (payload) {
        // var newToken = jwt.generate({
        //   _id: payload._id,
        //   username: payload.username
        // }, '1d')

        // res.headers('Authorization', newToken);
        next();
      } else {
        res.status(401).send({errCode: '-1', errorInfo: 'token过期'})
      }
    } else {
      res.send({
        code: '401',
        message: '未登录,无法访问该页面'
      })
    }
  }
})

app.use('/public/', express.static('./public/'))

// 将接口路由放在全局
app.use(UsersRouter);

// 需要添加的代码 end

// catch 404 and forward to error handler
app.use(function (req, res, next) {
  next(createError(404));
});

// error handler
app.use(function (err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
一个基于Vue3+Node.js的旅游博客系统系统架构文档时,可以按照以下结构进行组织: 1. 引言 - 系统背景和目标 - 文档范围和读者对象 - 定义缩略词和术语 2. 总体架构 - 系统概述和目标 - 架构类型(例如,客户端-服务器) - 架构图示或图表 - 系统模块和组件的描述和关系 3. 前端架构(Vue3) - 技术选择和理由 - 前端架构图示或图表 - 组件层次结构和职责 - 状态管理方案(例如,Vuex) - 路由方案(例如,Vue Router) - 与后端API的交互方式 4. 后端架构(Node.js) - 技术选择和理由 - 后端架构图示或图表 - 服务器层次结构和职责 - 数据库选择和设计 - 接口设计和文档 5. 部署架构 - 部署环境选择和理由 - 服务器配置和规划 - 前后端部署方式 - 系统监控和日志管理 6. 安全性考虑 - 用户认证和授权策略 - 数据保护和加密 - 防止常见的安全漏洞(例如,跨站点脚本攻击) 7. 性能和可扩展性考虑 - 系统性能目标 - 前端和后端的性能优化策略 - 数据库和服务器的扩展性规划 8. 未来发展和改进 - 可能的系统改进方向 - 技术升级和迁移计划 9. 附录 - 引用文档和资源 - 术语表 请注意,这只是一个基本的框架,你可以根据你的具体项目需求和架构特点进行扩展和调整。同时,尽量使用清晰的语言、图示或图表来表达架构设计思想,以便读者能够理解和参考。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值