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

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

准备

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

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

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

express   blog-admin-api

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

routes目录是路由。

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

express+node+mysql简单博客系统(一):登录接口
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验证一下登录接口:

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

成功了!

上一篇:html5API篇 ---- 四行写个服务器


下一篇:ajax 第十五节 AJAX-同源策略