今年一直想学一下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验证一下登录接口:
结果如下:
成功了!