ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

express+node+mysql简单博客系统(一):登录接口

2021-11-18 17:02:24  阅读:156  来源: 互联网

标签:node const express token result mysql data


今年一直想学一下node,现在马上就到年底了,赶紧安排!

准备

使用node、express和mysql开发简单的博客系统:

1、先安装node、express和mysql;
2、创建node项目,也就是博客的后端项目;

安装node和express后就直接可以使用express命令来创建项目了:

express   blog-admin-api

在目录下找到app.js,就是整个项目的入口文件

routes目录是路由。

在bin目录里的www文件可以修改端口号等。

在这里插入图片描述
constant存放定义的常量文件目录,controllers是接口的逻辑编辑。

这就是基本的文件目录。接下来开始链接mysql

链接mysql

创建config.js,设置链接mysql的参数,如host、用户名和密码等:

/*
 * @Author: yongyuan253015@gmail.com
 * @Date: 2021-08-08 17:41:35
 * @LastEditors: Please set LastEditors
 * @LastEditTime: 2021-11-17 22:42:36
 * @Description: 链接数据库
 */
const mysql = require("mysql");
const config = {
    database: 'blog',
    username: 'root',
    password: '1234567',
    host: 'localhost',
    port: 3306
}
const pool = mysql.createConnection({
    host: config.host,
    port: config.port,
    user: config.username,
    password: config.password,
    database: config.database
})
//开始连接数据库
pool.connect(function (err) {
    if (err) {
        console.log('[query] - :' + err);
    }
    console.log('[pool connect]  succeed!');
});

module.exports = pool;

登录的接口

1、先在routes目录下创建index.js,声明登录/login 的API:

/*
 * @Author: yongyuan253015@gmail.com
 * @Date: 2021-08-08 17:41:35
 * @LastEditors: Please set LastEditors
 * @LastEditTime: 2021-11-17 23:47:32
 * @Description: login——api
 */
var express = require('express');
const loginController = require("../controllers/index");
var router = express.Router();
router.post('/login', loginController.login)
module.exports = router;

2、编写login的controllers,就是loginController:

/*
 * @Author: yongyuan253015@gmail.com
 * @Date: 2021-10-02 17:07:45
 * @LastEditors: Please set LastEditors
 * @LastEditTime: 2021-11-17 23:19:08
 * @Description: 登录接口
 */
const Common = require('./common');
const Constant = require("../constant/constant");
const dateFormat = require('dateformat');
const Token = require('./token');
const pool = require('../config')
const TOKEN_EXPRESS_SENCOND = 360000000; // token有效期
const login = (req, res) => {
    const sql = `select * from admin where username='${req.body.username}' and password='${req.body.password}'`
    const resObj = Common.clone(Constant.DEFAULT_SUCCESS);
    pool.query(sql, (err, result) => {
        if (err) {
            res.send(Constant.DEFAULT_LOGIN_FAIL)
            return;
        }
        if(result){
            let token=Token.encrypt({id:result[0].id,TOKEN_EXPRESS_SENCOND})
            resObj.data={
                id: result[0].id,
                username: result[0].username,
                name: result[0].name,
                role: result[0].role,
                lastLoginAt: dateFormat(result[0].last_login_at, 'yyyy-mm-dd HH:MM:ss'),
                createAt: dateFormat(result[0].created_at, 'yyyy-mm-dd HH:MM:ss'),
                updateAt: dateFormat(result[0].updated_at, 'yyyy-mm-dd HH:MM:ss')
            };
            resObj.data.token = token;
            res.send(resObj);
        }
    })
}
module.exports = {
    login
};

其中common是声明公共方法的地方,例如clone函数

token

常见的登录会返回token,用来验证其他接口,所以这里需要安装第三方库jsonwebtoken,主要是根据当前登录用户的某个信息进行加密生成token。

token.js

代码:

const jwt = require("jsonwebtoken");
const tokenKey = "DFJdjfbjw356weg324erbgjsdhfdhdfbSAJHIHihIOHIUHLIJIOOIoihuiHIOHKJKIFFVnjkhuU";

const Token = {
    /**
     *   Token加密方法
     * @param {*} data  加密在token上的数据
     * @param {*} time   Token的过期时间,单位ms
     */
    encrypt: function (data) {
        return jwt.sign(data, tokenKey, { expiresIn: 3600 })
    },
    /**
     *  解密方法
     * @param {*} token  加密之后的Token
     *  reurns返回对象 {{
     *       token:boolean  (true表示Token合法)
     *       data:解密出来的数据或者是错误信息
     * }}
     */
    decrypt: function (token) {
        try {
            let data = jwt.verify(token, tokenKey);
            return {
                token: true,
                data: data
            }
        } catch (error) {
            return {
                token: false,
                data: error
            }
        }
    }
}

module.exports = Token;

tokenKey是我们自己设置的一个密钥。

结束

启动mysql,一般是安装后就启动了!

启动node服务node ./bin/www

最后用postman验证一下登录接口:

结果如下:
在这里插入图片描述

成功了!

标签:node,const,express,token,result,mysql,data
来源: https://blog.csdn.net/xuelian3015/article/details/121367366

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有