一,目录
npm config set registry https://registry.npmmirror.com
npm i express@4.17.1
npm i -y
npm install
npm i cors
npm i mysql
npm i jsonwebtoken
npm i express-jwt@5.3.3
npm i joi express-joi
npm i bcryptjs
二,config中的secret.js模块代码
exports.secret = "hahaha"
三,db中的index.js(管理数据库的)代码
const mysql = require('mysql')
const db = mysql.createPool({
host: "127.0.0.1",
user: 'root',
password: '123456',
port:"3308",
database: 'db_student'
})
module.exports = db
四,router中的student.js代码
const express = require('express')
const router = express.Router()
const student_handler = require('../router_handler/student_handler')
router.get('/getStudents', student_handler.getStudents)
router.post('/addStudent', student_handler.addStudents)
router.get('/getStudentdata/:id', student_handler.getId)
router.put('/editStudent/:id',student_handler.editStudent)
router.delete('/delStudent/:id', student_handler.delStudent)
module.exports = router
router中的teacher.js代码
const express = require("express")
const router = express.Router()
const teacher_handler = require('../router_handler/teacher_handler')
router.post('/regUser', teacher_handler.regUser)
router.post('/login', teacher_handler.login)
module.exports = router
五,router_handler中的student_handler.js代码
const { query } = require('express')
const db = require('../db/index')
exports.getStudents = (req, res) => {
let sql = 'SELECT s_id,s_name,gender,teachers.teachername FROM students,teachers WHERE students.t_id=teachers.t_id;'
db.query(sql, (err, rst) => {
if (err) return res.send({
status: 201,
msg: "sql执行错误"
})
if (rst.length == 0) {
return res.send({
status: 500,
msg: '获取学生列表失败'
})
}
res.send({
status: 200,
msg: '获取学生列表成功',
data: rst
})
})
}
exports.addStudents = (req, res) => {
let student = req.body
if(!student.s_name||!student.gender||!student.t_id){
return res.send({
status:201,
msg:'姓名或者性别或者老师id不能为空'
})
}
let sql = "select * from students where s_name=?"
db.query(sql, student.s_name, (err, rst) => {
if (err) return res.send({
status: 201,
msg: 'sql执行错误'
})
if (rst.length > 0) {
return res.send({
status: 204,
msg: "添加的学生已经存在"
})
}
let sql2 = "insert into students set ?"
db.query(sql2, student, (err, rst) => {
if (err) return res.send({
status: 201,
msg: 'sql执行错误'
})
if (rst.affectedRows != 1) return res.send({
status: 500,
msg: '添加失败'
})
res.send({
status: 200,
msg: "添加成功",
})
})
})
}
exports.getId = (req, res) => {
console.log(req)
let sql = 'SELECT * FROM students WHERE s_id=?'
db.query(sql, req.query.s_id, (err, rst) => {
console.log(rst)
if (err) return res.send({
status: 201,
msg: "sql执行错误"
})
if (rst.length == 0) return res.send({
status: 500,
msg: "获取失败"
})
res.send({
status: 200,
msg: '添加获取成功',
data:rst
})
})
}
exports.editStudent = (req, res) => {
console.log(req.query)
let newdate =req.query
if(!newdate.s_name||!newdate.gender||!newdate.t_id||!newdate.s_id){
return res.send({
status:203,
msg:'字段未写全(姓名,性别,老师ID,学生ID)'
})
}
let sql = "update students set s_name=? ,gender=?,t_id=? where s_id=?"
db.query(sql, [newdate.s_name, newdate.gender, newdate.t_id, newdate.s_id], (err, rst) => {
if (err) return res.send({
status: 201,
msg: 'sql执行错误'
})
if (rst.affectedRows !==1) return res.send({
status: 500,
msg: '修改失败'
})
res.send({
status: 200,
msg: '修改学生信息成功',
})
})
}
exports.delStudent = (req, res) => {
let id = req.query.s_id
if (!id) return res.send({
status: 203,
msg: '未指定要删除的学生Id'
})
let sql = 'DELETE FROM students WHERE s_id=?'
db.query(sql, id, (err, rst) => {
if (err) return res.send({
status: 201,
msg: "sql执行错误"
})
if (rst.affectedRows == 0) return res.send({
status: 500,
msg: "删除失败"
})
res.send({
status: 200,
msg: '删除成功'
})
})
}
router_handler中的teacher_handler.js代码
const jwt = require('jsonwebtoken')
const db = require('../db/index')
const config = require("../config/secret")
const bcrypt = require("bcryptjs")
exports.regUser = (req, res) => {
let teacher = req.body
if(!teacher.teachername||!teacher.password){
return res.send({
status:201,
msg:'用户名或密码不能为空!'
})
}
let sql = "select * from teachers where teachername=?"
db.query(sql, teacher.teachername, (err, rst) => {
if (err) return res.send({
status: 201,
msg: 'sql执行错误'
})
if (rst.length > 0) {
return res.send({
status: 202,
msg: "用户名已存在"
})
}
let sql2 = "insert into teachers set ?"
teacher.password = bcrypt.hashSync(teacher.password, 10)
db.query(sql2, teacher, (err, rst) => {
if (err) return res.send({
status: 201,
msg: 'sql执行错误'
})
if (rst.affectedRows != 1) return res.send({
status: 203,
msg: '注册失败'
})
res.send({
status: 200,
msg: "注册成功",
})
})
})
}
exports.login = (req, res) => {
let teacher = req.body
if(!teacher.teachername||!teacher.password){
return res.send({
status:201,
msg:'用户名或密码不能为空!'
})
}
let sql = 'select * from teachers where teachername=?'
db.query(sql, [teacher.teachername], (err, rst) => {
if (err) return res.send({
status: 201,
msg: "sql执行错误"
})
if (rst.length == 0) {
return res.send({
status: 203,
msg: '用户名或密码错误'
})
}
let compare = bcrypt.compareSync(teacher.password, rst[0].password)
if (!compare) {
return res.send({
status: 500,
msg: '登录失败'
})
}
const token = jwt.sign({ teachername: teacher.teachername }, config.secret, { expiresIn: '10h' })
res.send({
status: 200,
msg: "登录成功",
token: "Bearer " + token
})
})
}
六,app.js代码
const express=require("express")
const cors=require('cors')
const app=express()
const teacher=require('./router/teacher')
const students=require('./router/student')
const scret=require("./config/secret")
const expressjwt= require("express-jwt")
app.use(cors())
app.use(express.urlencoded({extended:false}))
app.use(expressjwt({ secret: scret.secret }).unless({ path: [/^\/api\/teacher\//] }))
app.use('/api/teacher',teacher)
app.use('/api/student',students)
app.use((err, req, res, next) => {
if (err.name == "UnauthorizedError")
return res.send({
status: 501,
msg: 'token验证失败'
})
res.send({
status: 503,
msg: '未知错误'
})
})
app.listen(3008,()=>{
console.log("server running at http://127.0.0.1:3008")
})