node.js: mysql sequelize es6 ORM in vscode and WebStorm 2023.1

mysql:

sql 复制代码
select * from tutorials;
# CREATE TABLE IF NOT EXISTS `tutorials` (`id` INTEGER NOT NULL auto_increment , `title` VARCHAR(255), `description` VARCHAR(255), `published` TINYINT(1), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;
insert into tutorials values(1,'geovindu','geovidu',1,'2025-05-04','2025-05-04');
insert into tutorials values(2,'涂聚文','涂聚文',0,'2025-05-04','2025-05-04');

前提配置好环境

执行程序会自动生成表

vscode 下写的代码:

javascript 复制代码
/**
 * dbConfig.js
 * node 20 vue.js 3.0
 * ide: vscode
 * mysql 8.0
 * npm install express sequelize mysql2 cors
 */
 
 
const dbConfig = {
    HOST: "localhost",
    USER: "root",
    PASSWORD: "geovindu",
    DB: "geovindu",
    dialect: "mysql",
    pool: {
      max: 5,
      min: 0,
      acquire: 30000,
      idle: 10000
    }
  };
 
  export default dbConfig;
 
  /**
   * select * from tutorials;
# CREATE TABLE IF NOT EXISTS `tutorials` (`id` INTEGER NOT NULL auto_increment , `title` VARCHAR(255), `description` VARCHAR(255), `published` TINYINT(1), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;
insert into tutorials values(1,'geovindu','geovidu',1,'2025-05-04','2025-05-04');
insert into tutorials values(2,'涂聚文','涂聚文',2,'2025-05-04','2025-05-04');
   *
   */


/**
 * models/tutorial.model.js
 * node 20 vue.js 3.0
 * ide: vscode
 * mysql 8.0
 * npm install express sequelize mysql2 cors
 */
 
//module.exports
const Tutorial = (sequelize, Sequelize) => {
    const Tutorial = sequelize.define("tutorial", {
      title: {
        type: Sequelize.STRING
      },
      description: {
        type: Sequelize.STRING
      },
      published: {
        type: Sequelize.BOOLEAN
      }
    });
   
    return Tutorial;
  };
 
  export default Tutorial;


/**
 * models/index.js
 * node 20 vue.js 3.0
 * ide: vscode
 * mysql 8.0
 * npm install express sequelize mysql2 cors
 */
 
import dbConfig from "../db.config.js";
import Sequelize from "sequelize";
import tutorials from "./tutorial.model.js"
 
const sequelize = new Sequelize(dbConfig.DB, dbConfig.USER, dbConfig.PASSWORD, {
  host: dbConfig.HOST,
  dialect: dbConfig.dialect,
  operatorsAliases: false,
 
  pool: {
    max: dbConfig.pool.max,
    min: dbConfig.pool.min,
    acquire: dbConfig.pool.acquire,
    idle: dbConfig.pool.idle
  }
});
 
const db = {};
 
db.Sequelize = Sequelize;
db.sequelize = sequelize;
 
//db.tutorials = require("./tutorial.model.js")(sequelize, Sequelize);
 db.tutorials=tutorials(sequelize, Sequelize);
 
//module.exports = db;
export default db;


/**
 * controllers/tutorial.controller.js
 * node 20 vue.js 3.0
 * ide: vscode
 * mysql 8.0
 * npm install express sequelize mysql2 cors
 */
 
import db  from "../models/index.js";
 
const Tutorial = db.tutorials;
const Op = db.Sequelize.Op;
 
//module.exports.
 const create = (req, res) => {
    // Validate request
    if (!req.body.title) {
      res.status(400).send({
        message: "Content can not be empty!"
      });
      return;
    }
   
    // Create a Tutorial
    const tutorial = {
      title: req.body.title,
      description: req.body.description,
      published: req.body.published ? req.body.published : false
    };
   
    // Save Tutorial in the database
    Tutorial.create(tutorial)
      .then(data => {
        res.send(data);
      })
      .catch(err => {
        res.status(500).send({
          message:
            err.message || "Some error occurred while creating the Tutorial."
        });
      });
  };
 
  //exports.create;
 // exports.create = create;
 
//module.exports.
 
const  findAll = (req, res) => {
    const title = req.query.title;
    var condition = title ? { title: { [Op.like]: `%${title}%` } } : null;
   
    Tutorial.findAll({ where: condition })
      .then(data => {
        res.send(data);
      })
      .catch(err => {
        res.status(500).send({
          message:
            err.message || "Some error occurred while retrieving tutorials."
        });
      });
  };
 
  //exports.findAll = findAll;
//findByPk
//module.exports.
 
const findOne = (req, res) => {
    const id = req.params.id;
   
    Tutorial.findByPk(id)
      .then(data => {
        if (data) {
          res.send(data);
        } else {
          res.status(404).send({
            message: `Cannot find Tutorial with id=${id}.`
          });
        }
      })
      .catch(err => {
        res.status(500).send({
          message: "Error retrieving Tutorial with id=" + id
        });
      });
  };
 
 
  //exports.findOne = findOne;
//  module.exports.
const update = (req, res) => {
    const id = req.params.id;
   
    Tutorial.update(req.body, {
      where: { id: id }
    })
      .then(num => {
        if (num == 1) {
          res.send({
            message: "Tutorial was updated successfully."
          });
        } else {
          res.send({
            message: `Cannot update Tutorial with id=${id}. Maybe Tutorial was not found or req.body is empty!`
          });
        }
      })
      .catch(err => {
        res.status(500).send({
          message: "Error updating Tutorial with id=" + id
        });
      });
  };
 
 // exports.update = update;
 
//destroy module.exports.
const deleteid = (req, res) => {
    const id = req.params.id;
   
    Tutorial.destroy({
      where: { id: id }
    })
      .then(num => {
        if (num == 1) {
          res.send({
            message: "Tutorial was deleted successfully!"
          });
        } else {
          res.send({
            message: `Cannot delete Tutorial with id=${id}. Maybe Tutorial was not found!`
          });
        }
      })
      .catch(err => {
        res.status(500).send({
          message: "Could not delete Tutorial with id=" + id
        });
      });
  };
 
  //exports.Delete = Delete; 
 
//destroy module.exports
const deleteAll = (req, res) => {
    Tutorial.destroy({
      where: {},
      truncate: false
    })
      .then(nums => {
        res.send({ message: `${nums} Tutorials were deleted successfully!` });
      })
      .catch(err => {
        res.status(500).send({
          message:
            err.message || "Some error occurred while removing all tutorials."
        });
      });
  };
 
 
   
  //exports.deleteAll = deleteAll;
//module.exports.
const findAllPublished = (req, res) => {
    Tutorial.findAll({ where: { published: true } })
      .then(data => {
        res.send(data);
      })
      .catch(err => {
        res.status(500).send({
          message:
            err.message || "Some error occurred while retrieving tutorials."
        });
      });
  };
 
  //exports.findAllPublished = findAllPublished;
 
  // 这个命名问题 tutorials
// 使用 ES6 的默认导出语法,直接导出包含所有函数的对象
 export default
  {
    findAllPublished,
    deleteAll,
    deleteid,
    update,
    findOne,
    findAll,
    create
  };
 
 //function
//module.exports={findAllPublished,deleteAll,Delete,update,findOne,findAll,create};


/**
 * routes/tutorial.routes.js
 * node 20 vue.js 3.0
 * ide: vscode
 * mysql 8.0
 * npm install express sequelize mysql2 cors
 * https://www.bezkoder.com/node-js-express-sequelize-mysql/
 * 路由报错,还没有配置好 数据库连接OK
 */
 
import express from "express"
import tutorials from "../controllers/tutorial.controller.js"
//import Tutorial from "../models/tutorial.model.js";
 
//module.exports
 const routes= app => {
    //const tutorials = require("../controllers/tutorial.controller.js");
     
    var router = express.Router();
   
     
 
    // Create a new Tutorial
    //app.post("/", Tutorial.findAll);
    router.post("/",tutorials.create)
 
    // Retrieve all Tutorials
    router.get("/", tutorials.findAll);
  /**/
    // Retrieve all published Tutorials
    router.get("/published", tutorials.findAll);
   
    // Retrieve a single Tutorial with id
    router.get("/:id", tutorials.findOne);
   
    // Update a Tutorial with id
    router.put("/:id", tutorials.update);
   
    // Delete a Tutorial with id
    router.put("/:id", tutorials.deleteid);
   
    // Delete all Tutorials
    router.put("/", tutorials.deleteAll);
   
    //app.use('/api/tutorials', router);
    app.use('/api/tutorials',router);
  };
 
  export default routes;

/**
 * server.js
 * node 20 vue.js 3.0
 * ide: vscode
 * mysql 8.0
 * npm install express sequelize mysql2 cors
 */
 
 
import express from "express";
import cors from "cors";
import db from "./models/index.js"
import routes from "./routes/turorial.routes.js"
 
 
const Tutorial = db.tutorials;
 
//require("./app/routes/turorial.routes")(app);
 
const app = express();
 
//var routes =require("./app/routes/turorial.routes");
 
routes(app);
//app.routes();
 
var corsOptions = {
  origin: "http://localhost:8080"
};
 
app.use(cors(corsOptions));
 
// parse requests of content-type - application/json
app.use(express.json());
 
// parse requests of content-type - application/x-www-form-urlencoded
app.use(express.urlencoded({ extended: true }));
 
 
//http://localhost:8080/models
///http://localhost:8080/tutorials
//const db = require("./app/models");
db.sequelize.sync()
  .then(() => {
    console.log("Synced db.");
  })
  .catch((err) => {
    console.log("Failed to sync db: " + err.message);
  });
 
  //routes(app); //这行路由编译报错
 
// simple route
app.get("/", (req, res) => {
 
/*
  if (!req.body.title) {
    res.status(400).send({
      message: "Content can not be empty!"
    });
    return;
  }
*/
  // Create a Tutorial
  const tutorial = {
    title: '兴大兴',
    description: '涂没有什么',
    published: false,
    createdAt:'2024-08-05',
    updatedAt:'2024-08-05'
  };
 
  // Save Tutorial in the database
  Tutorial.create(tutorial)
    .then(data => {
      res.send(data);     
    })
    .catch(err => {
      res.status(500).send({
        message:
          err.message || "Some error occurred while creating the Tutorial."
      });
    });
 
    res.json({ message: "数据添加成功!." });
 
});
 
// set port, listen for requests  http://localhost:8080
const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}.`);
});

运行:

javascript 复制代码
node server

WebStorm 2023.1 下的代码 来源于: https://www.bezkoder.com/node-js-express-sequelize-mysql/

javascript 复制代码
/**
 *  dbConfig.js
 *  node 20 vue.js 3.0
 * ide: WebStorm 2023.1
 * mysql 8.0
 * npm install express sequelize mysql2 cors
 * */
 
module.exports = {
  HOST: "localhost",
  USER: "root",
  PASSWORD: "geovindu",
  DB: "geovindu",
  dialect: "mysql",
  pool: {
    max: 5,
    min: 0,
    acquire: 30000,
    idle: 10000
  }
};
 
/*
* http://localhost:8081/api/tutorials
http://localhost:8081/api/tutorials/1
http://localhost:8081/api/tutorials?title=geovindu
http://localhost:8081/api/tutorials/published
* npm install express sequelize mysql2 cors --save
* select * from tutorials;
# CREATE TABLE IF NOT EXISTS `tutorials` (`id` INTEGER NOT NULL auto_increment , `title` VARCHAR(255), `description` VARCHAR(255), `published` TINYINT(1), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;
insert into tutorials values(1,'geovindu','geovidu',1,'2025-05-04','2025-05-04');
insert into tutorials values(2,'涂聚文','涂聚文',0,'2025-05-04','2025-05-04');
* */

/**
 * models/index.js
 *  node 20 vue.js 3.0
 * ide: WebStorm 2023.1
 * mysql 8.0
 * npm install express sequelize mysql2 cors
 * */
 
const dbConfig = require("../config/db.config.js");
 
const Sequelize = require("sequelize");
const sequelize = new Sequelize(dbConfig.DB, dbConfig.USER, dbConfig.PASSWORD, {
  host: dbConfig.HOST,
  dialect: dbConfig.dialect,
  operatorsAliases: false,
 
  pool: {
    max: dbConfig.pool.max,
    min: dbConfig.pool.min,
    acquire: dbConfig.pool.acquire,
    idle: dbConfig.pool.idle
  }
});
 
const db = {};
 
db.Sequelize = Sequelize;
db.sequelize = sequelize;
 
db.tutorials = require("./tutorial.model.js")(sequelize, Sequelize);
 
module.exports = db;


/**
 * models/tutorial.model.js
 * node 20 vue.js 3.0
 * ide: WebStorm 2023.1
 * mysql 8.0
 * npm install express sequelize mysql2 cors
 * */
 
 
module.exports = (sequelize, Sequelize) => {
  const Tutorial = sequelize.define("tutorial", {
    title: {
      type: Sequelize.STRING
    },
    description: {
      type: Sequelize.STRING
    },
    published: {
      type: Sequelize.BOOLEAN
    }
  });
 
  return Tutorial;
};


/**
 *  controllers/tutorial.controller.js
 *  node 20 vue.js 3.0
 * ide: WebStorm 2023.1
 * mysql 8.0
 * npm install express sequelize mysql2 cors
 * */
 
const db = require("../models");
const Tutorial = db.tutorials;
const Op = db.Sequelize.Op;
 
// Create and Save a new Tutorial
exports.create = (req, res) => {
  // Validate request
  if (!req.body.title) {
    res.status(400).send({
      message: "Content can not be empty!"
    });
    return;
  }
 
  // Create a Tutorial
  const tutorial = {
    title: req.body.title,
    description: req.body.description,
    published: req.body.published ? req.body.published : false
  };
 
  // Save Tutorial in the database
  Tutorial.create(tutorial)
    .then(data => {
      res.send(data);
    })
    .catch(err => {
      res.status(500).send({
        message:
          err.message || "Some error occurred while creating the Tutorial."
      });
    });
};
 
// Retrieve all Tutorials from the database.
exports.findAll = (req, res) => {
  const title = req.query.title;
  var condition = title ? { title: { [Op.like]: `%${title}%` } } : null;
 
  Tutorial.findAll({ where: condition })
    .then(data => {
      res.send(data);
    })
    .catch(err => {
      res.status(500).send({
        message:
          err.message || "Some error occurred while retrieving tutorials."
      });
    });
};
 
// Find a single Tutorial with an id
exports.findOne = (req, res) => {
  const id = req.params.id;
 
  Tutorial.findByPk(id)
    .then(data => {
      if (data) {
        res.send(data);
      } else {
        res.status(404).send({
          message: `Cannot find Tutorial with id=${id}.`
        });
      }
    })
    .catch(err => {
      res.status(500).send({
        message: "Error retrieving Tutorial with id=" + id
      });
    });
};
 
// Update a Tutorial by the id in the request
exports.update = (req, res) => {
  const id = req.params.id;
 
  Tutorial.update(req.body, {
    where: { id: id }
  })
    .then(num => {
      if (num == 1) {
        res.send({
          message: "Tutorial was updated successfully."
        });
      } else {
        res.send({
          message: `Cannot update Tutorial with id=${id}. Maybe Tutorial was not found or req.body is empty!`
        });
      }
    })
    .catch(err => {
      res.status(500).send({
        message: "Error updating Tutorial with id=" + id
      });
    });
};
 
// Delete a Tutorial with the specified id in the request
exports.delete = (req, res) => {
  const id = req.params.id;
 
  Tutorial.destroy({
    where: { id: id }
  })
    .then(num => {
      if (num == 1) {
        res.send({
          message: "Tutorial was deleted successfully!"
        });
      } else {
        res.send({
          message: `Cannot delete Tutorial with id=${id}. Maybe Tutorial was not found!`
        });
      }
    })
    .catch(err => {
      res.status(500).send({
        message: "Could not delete Tutorial with id=" + id
      });
    });
};
 
// Delete all Tutorials from the database.
exports.deleteAll = (req, res) => {
  Tutorial.destroy({
    where: {},
    truncate: false
  })
    .then(nums => {
      res.send({ message: `${nums} Tutorials were deleted successfully!` });
    })
    .catch(err => {
      res.status(500).send({
        message:
          err.message || "Some error occurred while removing all tutorials."
      });
    });
};
 
// find all published Tutorial
exports.findAllPublished = (req, res) => {
  Tutorial.findAll({ where: { published: true } })
    .then(data => {
      res.send(data);
    })
    .catch(err => {
      res.status(500).send({
        message:
          err.message || "Some error occurred while retrieving tutorials."
      });
    });
};


/**
 * routes/tutorial.routes.js
 * node 20 vue.js 3.0
 * ide: WebStorm 2023.1
 * mysql 8.0
 * npm install express sequelize mysql2 cors
 * */
 
 
module.exports = app => {
  const tutorials = require("../controllers/tutorial.controller.js");
 
  var router = require("express").Router();
 
  // Create a new Tutorial
  router.post("/", tutorials.create);
 
  // Retrieve all Tutorials
  router.get("/", tutorials.findAll);
 
  // Retrieve all published Tutorials
  router.get("/published", tutorials.findAllPublished);
 
  // Retrieve a single Tutorial with id
  router.get("/:id", tutorials.findOne);
 
  // Update a Tutorial with id
  router.put("/:id", tutorials.update);
 
  // Delete a Tutorial with id
  router.delete("/:id", tutorials.delete);
 
  // Delete all Tutorials
  router.delete("/", tutorials.deleteAll);
 
  app.use('/api/tutorials', router);
};

/**
 * server.js
 * node 20 vue.js 3.0
 * ide: WebStorm 2023.1
 * mysql 8.0
 * npm install express sequelize mysql2 cors
 * */
 
 
const express = require("express");
const cors = require("cors");
 
const app = express();
 
var corsOptions = {
  origin: "http://localhost:8081"
};
 
app.use(cors(corsOptions));
 
// parse requests of content-type - application/json
app.use(express.json());
 
// parse requests of content-type - application/x-www-form-urlencoded
app.use(express.urlencoded({ extended: true }));
 
const db = require("./app/models");
 
db.sequelize.sync()
  .then(() => {
    console.log("Synced db.");
  })
  .catch((err) => {
    console.log("Failed to sync db: " + err.message);
  });
 
// // drop the table if it already exists
// db.sequelize.sync({ force: true }).then(() => {
//   console.log("Drop and re-sync db.");
// });
 
// simple route
app.get("/", (req, res) => {
  res.json({ message: "Welcome to bezkoder application." });
});
 
require("./app/routes/turorial.routes")(app);
 
// set port, listen for requests
const PORT = process.env.PORT || 8081;
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}.`);
});

运行:

javascript 复制代码
node server.js
相关推荐
H5css�海秀7 小时前
今天是自学大模型的第一天(sanjose)
后端·python·node.js·php
身如柳絮随风扬7 小时前
MySQL核心知识
数据库·mysql
551只玄猫8 小时前
【数据库原理 实验报告1】创建和管理数据库
数据库·sql·学习·mysql·课程设计·实验报告·数据库原理
q5431470878 小时前
MySQL SQL100道基础练习题
数据库·mysql
zhoupenghui1688 小时前
mysql 中如果条件where中有or,则要求or两边的字段都必须有索引,否则不能用到索引, 为什么?
数据库·mysql·索引
eggwyw9 小时前
完美解决phpstudy安装后mysql无法启动
数据库·mysql
java修仙传10 小时前
MySQL 事务隔离级别详解
数据库·mysql·oracle
Irissgwe10 小时前
MySQL存储过程和触发器专题
数据库·mysql·oracle
skiy12 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
创世宇图13 小时前
Alibaba Cloud Linux 安装生产环境-mysql
linux·mysql