123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- const express = require("express")
- //引入jwt
- const jwt = require("jsonwebtoken")
- const app = express()
- const STU_ARR = [
- { id: "1", name: "孙悟空", age: 18, gender: "男", address: "花果山" },
- { id: "2", name: "猪八戒", age: 28, gender: "男", address: "高老庄" },
- { id: "3", name: "沙和尚", age: 38, gender: "男", address: "流沙河" }
- ]
- //解析请求体的中间件
- app.use(express.urlencoded({ extended: true }))
- //解析json格式请求体的中间件
- app.use(express.json())
- app.use((req, res, next) => {
- //设置响应头,“*”表示所有请求都可以
- res.setHeader("Access-Control-Allow-Origin", "*")
- res.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,PATCH")
- res.setHeader("Access-Control-Allow-Headers", "Content-type,Authorization")
- //Access-Control-Allow-Origin 设置指定值时只能设置一个,如果有多个地址,
- //需要将地址放入数组,然后动态进行设置
- //res.setHeader("Access-Control-Allow-Origin","http://127.0.0.1:5500/")
- //Access-Control-Allow-Methods 允许的请求方式
- //Access-Control-Allow-Headers 允许传递的请求头
- next()
- //next()表示放行,否则程序到不了下一步
- })
- app.get("/test",(req,res)=>{
- })
- //定义一个登陆的路由
- app.post("/login", (req, res) => {
- //获取用户输入的用户名和密码
- const { username, password } = req.body
- //验证用户名和密码
- if (username === "admin" && password === "123123") {
- //登录成功,生成token
- const token = jwt.sign({
- id: "12345",
- username: "admin",
- nickname: "超级管理员"
- }, "chaojianquanmima",{
- expiresIn:"1d"
- })
- //实际开发中,密钥一般都存储在配置文件中,并且随机生成
- //登陆成功
- res.send({
- status: "ok",
- //如果只发送token,可能会有些数据不全,所以还可以发送一些没有加密的不太敏感的数据
- data: {
- token,
- nickname:"超级管理员"
- }
- })
- } else {
- //登陆失败
- res.status(403).send({
- status: "error",
- data: "用户名或密码错误"
- })
- }
- })
- //统一的api
- //定义学生信息相关的路由
- app.get("/students", (req, res) => {
- //console.log("收到students的get请求");
- try{
- //这个路由必须在用户登录后才能访问
- //需要检查用户是否登录
- //读取请求头
- //const token = req.get("Authorization").split(" ")[1]
- //console.log(token);
- //对token进行解码
- //const decodeToken = jwt.verify(token,"chaojianquanmima")
- //console.log(decodeToken);
- //解码成功,token有效
- //返回学生信息
- res.send({
- status: "ok",
- data: STU_ARR
- })
- }catch(e){
- //解码错误,用户token无效
- res.status(403).send({
- status:"error",
- data:"token无效"
- })
- }
- })
- //查询某个学生的路由
- app.get("/students/:id", (req, res) => {
- const id = req.params.id
- const stu = STU_ARR.find(item => item.id === id)
- //将数据返回
- res.send({
- status: "ok",
- data: stu
- })
- })
- //定义一个添加学生的路由
- app.post("/students", (req, res) => {
- //console.log("收到students的post请求",req.body);
- //获取学生的信息
- const { name, age, gender, address } = req.body
- //创建学生信息
- const stu = {
- id: +STU_ARR.at(-1).id + 1 + "",
- //STU_ARR.at(-1).id:获取最后一项的id,前面加个加号“+”表示转换为数值
- //+STU_ARR.at(-1).id + 1 + "":表示id加1后再转换为字符串
- name,
- age: +age,
- gender,
- address
- }
- //将学生信息添加到数组
- STU_ARR.push(stu)
- //添加成功
- res.send({
- status: "ok",
- data: stu
- })
- })
- //定义一个删除学生的路由,根据id删除学生
- app.delete("/students/:id", (req, res) => {
- //获取学生的id
- const id = req.params.id
- //遍历数组
- for (let i = 0; i < STU_ARR.length; i++) {
- if (STU_ARR[i].id == id) {
- const delStu = STU_ARR[i]
- STU_ARR.splice(i, 1)
- res.send({
- status: "ok",
- data: delStu
- })
- }
- }
- //如果执行到这里,说明学生不存在
- res.status(403).send({
- status: "error",
- data: "学生id不存在"
- })
- })
- //定义一个修改学生的路由
- //学生id可以在students后面传,也可以跟请求体一起传
- app.put("/students", (req, res) => {
- //获取数据
- const { id, name, age, gender, address } = req.body
- //根据id查询学生
- const updateStu = STU_ARR.find(item => item.id === id)
- if (updateStu) {
- updateStu.name = name
- updateStu.age = age
- updateStu.gender = gender
- updateStu.address = address
- res.send({
- status: "ok",
- data: updateStu
- })
- } else {
- res.status(403).send({
- status: "error",
- data: "学生id不存在"
- })
- }
- })
- app.listen(3000, () => {
- console.log("服务器已经启动")
- })
|