Skip to content

node 全栈

技术选型

nodejs + vue3

表设计

建表建库

sql
CREATE DATABASE `node_vue3` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE `node_vue3`;

-- 管理员表
CREATE TABLE `admin` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL COMMENT '用户名',
  `password` varchar(255) NOT NULL COMMENT '密码',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NOT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='管理员表';
CREATE DATABASE `node_vue3` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE `node_vue3`;

-- 管理员表
CREATE TABLE `admin` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL COMMENT '用户名',
  `password` varchar(255) NOT NULL COMMENT '密码',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NOT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='管理员表';

vscode 安装插件 mysql,执行 sql

Node 项目初始化

bash
npm init -y
npm init -y

安装 express

bash
npm i express
npm i express

项目结构

bash
├── app.js
├── bin
   └── www
├── config
   ├── config.default.js
   └── config.prod.js
├── controllers
   └── admin.js
├── index.js
├── lib
   └── db.js
├── models

## 项目启动

```bash
node app.js
├── app.js
├── bin
   └── www
├── config
   ├── config.default.js
   └── config.prod.js
├── controllers
   └── admin.js
├── index.js
├── lib
   └── db.js
├── models

## 项目启动

```bash
node app.js

项目配置

js
const config = require("./config/config.default");
const db = require("./lib/db");
const express = require("express");
const app = express();
const port = process.env.PORT || config.port;
app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}`);
});
const config = require("./config/config.default");
const db = require("./lib/db");
const express = require("express");
const app = express();
const port = process.env.PORT || config.port;
app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}`);
});

项目路由

js
const express = require("express");
const router = express.Router();
const adminController = require("../controllers/admin");
router.get("/admin/login", adminController.login);
router.post("/admin/login", adminController.login);
router.get("/admin/logout", adminController.logout);
module.exports = router;
const express = require("express");
const router = express.Router();
const adminController = require("../controllers/admin");
router.get("/admin/login", adminController.login);
router.post("/admin/login", adminController.login);
router.get("/admin/logout", adminController.logout);
module.exports = router;

项目控制器

js
const db = require("../lib/db");
const { SuccessModel, ErrorModel } = require("../model/resModel");
class AdminController {
  async login(req, res) {
    const { username, password } = req.body;
    if (!username || !password) {
      return res.json(new ErrorModel("用户名或密码不能为空"));
    } else {
      const result = await db.query("select * from admin where username =?", [
        username,
      ]);
      if (result.length === 0) {
        return res.json(new ErrorModel("用户名或密码错误"));
      } else {
        const admin = result[0];
        if (admin.password !== password) {
          return res.json(new ErrorModel("用户名或密码错误"));
        } else {
          req.session.admin = {
            id: admin.id,
            username: admin.username,
          };
          return res.json(new SuccessModel());
        }
      }
    }
  }
  async logout(req, res) {
    req.session.admin = null;
    return res.json(new SuccessModel());
  }
}
module.exports = new AdminController();
const db = require("../lib/db");
const { SuccessModel, ErrorModel } = require("../model/resModel");
class AdminController {
  async login(req, res) {
    const { username, password } = req.body;
    if (!username || !password) {
      return res.json(new ErrorModel("用户名或密码不能为空"));
    } else {
      const result = await db.query("select * from admin where username =?", [
        username,
      ]);
      if (result.length === 0) {
        return res.json(new ErrorModel("用户名或密码错误"));
      } else {
        const admin = result[0];
        if (admin.password !== password) {
          return res.json(new ErrorModel("用户名或密码错误"));
        } else {
          req.session.admin = {
            id: admin.id,
            username: admin.username,
          };
          return res.json(new SuccessModel());
        }
      }
    }
  }
  async logout(req, res) {
    req.session.admin = null;
    return res.json(new SuccessModel());
  }
}
module.exports = new AdminController();

项目模型

js
class SuccessModel {
  constructor(data = {}) {
    this.code = 200;
    this.msg = "success";
    this.data = data;
  }
}
class ErrorModel {
  constructor(msg) {
    this.code = 500;
    this.msg = msg;
    this.data = {};
  }
}
class SuccessModel {
  constructor(data = {}) {
    this.code = 200;
    this.msg = "success";
    this.data = data;
  }
}
class ErrorModel {
  constructor(msg) {
    this.code = 500;
    this.msg = msg;
    this.data = {};
  }
}

项目数据库

js
const mysql = require("mysql");
const config = require("../config/config.default");
const pool = mysql.createPool(config.mysql);
module.exports = {
  query(sql, values) {
    return new Promise((resolve, reject) => {
      pool.getConnection((err, connection) => {
        if (err) {
          reject(err);
        } else {
          connection.query(sql, values, (err, results) => {
            connection.release();
            if (err) {
              reject(err);
            } else {
              resolve(results);
            }
          });
        }
      });
    });
  },
};
const mysql = require("mysql");
const config = require("../config/config.default");
const pool = mysql.createPool(config.mysql);
module.exports = {
  query(sql, values) {
    return new Promise((resolve, reject) => {
      pool.getConnection((err, connection) => {
        if (err) {
          reject(err);
        } else {
          connection.query(sql, values, (err, results) => {
            connection.release();
            if (err) {
              reject(err);
            } else {
              resolve(results);
            }
          });
        }
      });
    });
  },
};