当前位置: 首页 > article >正文

node.js学习Day2

目录

1.安装sequelize和mysql2

2.在dao文件下新建dbConnect.js,连接数据库

3.下载dotenv,统一配置环境变量,对第二步的升级补充

4.自定义错误方法,根目录下新建utils文件夹,文件夹下新建文件errors.js

5.根目录下创建model文件夹,model文件夹下创建adminModel.js文件

6.dao文件夹下创建db.js文件

7.下载md5,实现加密


1.安装sequelize和mysql2
npm install --save sequelize mysql2

官网:入门 | Sequelize中文文档 | Sequelize中文网

2.在dao文件下新建dbConnect.js,连接数据库
//dbConnect.js

//连接数据库
const { Sequelize } = require("sequelize")
//创建连接
const sequelize = new Sequelize('mysite', 'root', 'root', {
  host: 'localhost',
  dialect: 'mysql', /* one of 'mysql' | 'postgres' | 'sqlite' | 'mariadb' | 'mssql' | 'db2' | 'snowflake' | 'oracle' */
  logging: false
});
(async function () {
  try {
    await sequelize.authenticate();
    console.log('Connection has been established successfully.');
  } catch (error) {
    console.error('Unable to connect to the database:', error);
  }
}())

//app.js
//引入数据库链接
require("./dao/dbConnect")
3.下载dotenv,统一配置环境变量,对第二步的升级补充
//下载dotenv
npm i dotenv

//app.js,注意放在引入数据库链接的前面
//默认读取项目根目录下.env环境变量
require("dotenv").config();

//.env,写自己的数据库名字,密码什么的
DB_NAME=mysite
DB_USER=root
DB_PASS=root
DB_HOST=localhost

//dbConnect.js
//连接数据库
const { Sequelize } = require("sequelize")
//创建连接
const sequelize = new Sequelize(process.env.DB_NAME, process.env.DB_USER, process.env.DB_PASS, {
  host: process.env.DB_HOST,
  dialect: 'mysql', /* one of 'mysql' | 'postgres' | 'sqlite' | 'mariadb' | 'mssql' | 'db2' | 'snowflake' | 'oracle' */
  logging: false
});
(async function () {
  try {
    await sequelize.authenticate();
    console.log('Connection has been established successfully.');
  } catch (error) {
    console.error('Unable to connect to the database:', error);
  }
}())
4.自定义错误方法,根目录下新建utils文件夹,文件夹下新建文件errors.js
// 自定义错误
class ServiceError extends Error {
  constructor(message, code) {
    super(message);
    this.code = code;
  }
  toResponseJSON() {

  }

}
// throw new ServiceError('aaa', 123);

// 文件上传错误
export class UploadError extends ServiceError {
  constructor(message) {
    super(message, 413);
  }
}
// 禁止访问错误
export class ForbiddenError extends ServiceError {
  constructor(message) {
    super(message, 401);
  }
}
// 验证错误
export class ValidtionError extends ServiceError {
  constructor(message) {
    super(message, 406);
  }
}
// 无资源错误
export class NotFoundError extends ServiceError {
  constructor(message) {
    super("not found", 404);
  }
}
// 未知错误
export class UnKnownError extends ServiceError {
  constructor(message) {
    super("server internal error", 500);
  }
}

module.exports.ServiceError = ServiceError
5.根目录下创建model文件夹,model文件夹下创建adminModel.js文件
const { DataTypes } = require("sequelize");
const sequelize = require("../dao/dbConnect");

// 定义数据模型
module.exports = sequelize.define("admin", {
  loginId: {
    type: DataTypes.STRING,
    allowNull: false
  },
  name: {
    type: DataTypes.STRING,
    allowNull: false
  },
  loginPwd: {
    type: DataTypes.STRING,
    allowNull: false
  },
}, {
  freezeTableName: true,
  createdAt: false,
  updatedAt: false
})
6.dao文件夹下创建db.js文件
// 初始化数据库
const sequelize = require("./dbConnect");
const adminModel = require("../model/adminModel");
const md5 = require("md5");
(async function () {
  //数据模型和表同步
  await sequelize.sync({
    alter: true,
  })

  //初始化数据
  const adminCount = await adminModel.count();
  if (!adminCount) {
    await adminModel.create({
      loginId: 'admin',
      name: 'admin',
      loginPwd: md5("123456")
    })
    console.log("初始化管理员数据完毕...")
  }
  console.log("数据库数据准备完毕...")
})()
7.下载md5,实现加密
npm i md5
//app.js
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var adminRouter = require('./routes/admin');

var app = express();

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/api/admin', adminRouter);

//默认读取项目根目录下.env环境变量
require("dotenv").config();
//引入数据库链接
require("./dao/db")


// catch 404 and forward to error handler
app.use(function (req, res, next) {
  next(createError(404));
});

// error handler
app.use(function (err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;


http://www.kler.cn/a/370667.html

相关文章:

  • 技术洞察:C++在后端开发中的前沿趋势与社会影响
  • RV1126+FFMPEG推流项目(9)AI和AENC模块绑定,并且开启线程采集
  • NodeJS | 搭建本地/公网服务器 live-server 的使用与安装
  • PTA L1-039 古风排版
  • 对话 TDengine 解决方案中心总经理陈肃:构建技术与市场的桥梁
  • win32汇编环境,窗口程序中基础列表框的应用举例
  • asp.net WebForm GridView高级应用
  • 精选免费剪辑软件,为你的视频创作添彩
  • 排序(一)插入排序,希尔排序,选择排序,堆排序,冒泡排序
  • Redis Bitmap介绍和使用场景
  • 《链表篇》---环形链表II(返回节点)
  • Pytorch笔记--RuntimeError: NCCL communicator was aborted on rank 3.
  • C#自定义事件的案例
  • 前端阻止用户调试(禁用F12,禁用右键菜单,禁用查看源代码,禁用复制,无限debugger断点)
  • 【Linux 从基础到进阶】高负载系统的优化与维护
  • Java学习Day51:紫云山金丹培育基地(移动端开发之多表联查,发送短信验证码)
  • Spring Task—定时任务
  • 钉钉日常报销单与金蝶云星空集成技术详解
  • springboot配置websocket
  • 2025秋招八股文--RPC篇
  • 深入理解TCP——面试20问
  • win docker desktop踩坑及解决方案(拉取镜像失败)
  • 前端对一个增删改查的思考
  • 【机器学习】多项式回归
  • 实战OpenCV之深度学习
  • <大厂实战场景> ~ flutter鸿蒙next处理后端返回来的数据的转义问题