赞
踩
1、cnpm init
2、cnpm install express mysql cors body-parser
3、创建config.js文件,连接数据库
// 引入mysql中间件
const mysql=require('mysql')
// 创建连接
let connection=mysql.createConnection({
host:"xxx.xx.xx.xx", //数据库主机名
user:"root",// user 用户名
password:"123456", // 密码
port: 3306, //端口号
database:"db_****" // 所连接的数据库名称
})
//连接数据库
connection.connect();
4、创建http.js
//引入模块
const express=require('express');
const app=express();
const url=require('url')
const db=require('./config.js');
// 解决跨区域问题
// 导入中间件 cors
const cors = require('cors');
// 在路由之前调用app.use(cors())配置中间件
app.use(cors());
app.all("*",function(req,res,next){
res.header("Acess-Control-Allow-Origin","*");
next();
})
// 设置端口
app.listen(8888,function(){
console.log('正在启动888....');
})
5、设置端口;在api文件夹终端打开 输入node http.js,测试是否设置成功
6、创建api目录index.js
//引入模块
const express = require('express');
const serve = require('../config.js');
const router = express.Router()
const mysql = require('mysql')
// 连接数据库
const conn = mysql.createConnection(serve.mysql)
conn.connect()
// 返回格式
const jsonWrite = function (res, ret, err) {
if (err) return res.json({ code: -1, message: err.message }) // 返回错误
if (typeof ret === 'undefined') {
res.json({code: '-1',message: '操作失败'})
} else {
res.json({code: 1,data: ret,message: "success"})
}
}
// 查询全部
router.get('/api/getData', (req, res) => {
const sql = 'SELECT * FROM t_coach where status != 1';
const params = req.query;
conn.query(sql, params, (err, result) => {
jsonWrite(res, result, err)
})
})
// 查询详情
router.post('/api/getDetailsData', (req, res) => {
const params = req.body;
const sql = 'SELECT * FROM t_coach where c_id = ' + mysql.escape(params.c_id)
conn.query(sql, (err, result) => {
jsonWrite(res, result, err)
})
})
// 添加
router.post('/api/addData', (req, res) => {
const params = req.body;
// const sql = 'INSERT INTO t_coach (c_name, c_level) values (' + mysql.escape([params.c_name, params.c_level]) + ")"
const sql = 'INSERT INTO t_coach set ?' // 简易写法添加所有
conn.query(sql, params,(err, result) => {
jsonWrite(res, result, err)
})
})
// 修改
router.post('/api/updateData', (req, res) => {
const params = req.body;
const sql = 'update t_coach set ? where c_id = ?' // 简易写法根据查到的id进行修改数据
conn.query(sql, [params, params.c_id], (err, result) => {
jsonWrite(res, result, err)
})
})
// 删除
router.post('/api/deleteData', (req, res) => {
const params = req.body;
// const sql = 'delete from t_coach where c_id =' + mysql.escape(params.c_id) //真删除有危险
// 标记删除 status 执行删除的时候把该条数据的status 状态改为1,作为标记
const sql ='update t_coach set status = 1 where c_id = ' + mysql.escape(params.c_id)
conn.query(sql, (err, result) => {
jsonWrite(res, result, err)
})
})
7、安装jsonwebtoken 和express-jwt 进行验证 生成token
安装6.1.1的版本不会报expressJwt 错,但是要添加algorithms,使用 unless 放过一些不需要验证的接口
// 注册 JWT 字符串解析还原成 json 对象的中间件
const expressJwt = require('express-jwt')
const secretKey = 'iteheima No1 φ(* ̄0 ̄)' // 任意字节
app.use(expressJwt({ secret: secretKey, algorithms:['HS256'] }).unless({ path: ["/api/login"] }))
在登录接口中使用生成token
const jwt = require('jsonwebtoken')
// 为了保证 JWT 字符串的安全性,防止 JWT 字符串在网络传输过程中被别人破解,我们需要专门定义一个用于加密和解密 secret
// 当生成 JWT 字符的时候,需要使用secret密钥对用户的信息进行加密,最终得到加密好的 JWT 字符串
// 当把 JWT 字符申解析还原成JSON 对象的时候,需要使用secret密进行解密
router.post('/api/login', (req, res) => {
const sql = 'SELECT * FROM user';
const params = req.body;
conn.query(sql, params, (err, result) => {
const user = JSON.parse(JSON.stringify(result))[0]
if (params.username == user.username && params.password == user.password) {
// 登陆成功之后,调用jwt.sign()方法生成jwt 字符串,并通过token属性发送给客户端
// 参数1: 用户的信息对象
// 参数2: 加密的秘钥
// 参数3: 配置对象,可以配置当前 token 的有效期
const tokenKey = jwt.sign({ username: user.username }, secretKey, { expiresIn: '300s' })
res.json({code: 1,message: 'success',token: tokenKey})
} else {
res.json({code: -1,message: 'err'})
}
})
})
8、验证token失效
app.use((err,req,res,next) => {
// token过期或者无效
const token = req.headers.authorization
jwt.verify(token, secretKey ,(error, decoded) => {
if (error) {
// console.log("token过期或者无效")
res.json({
code: -2,
message: 'token过期或者无效'
})
}
});
})
还有后续…
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。