基于express+TS+mysql+sequelize的后端开发环境搭建

ops/2025/3/17 20:16:01/

步骤一:初始化node环境

npm init -y

 步骤二:安装 Express、TypeScript、以及相关类型的定义文件

npm install express

npm install --save-dev typescript @types/node @types/express ts-node nodemon

npm install body-parser

npm install mysql2

npm install sequelize

 步骤三:初始化ts文件配置

创建 tsconfig.json 文件来配置 TypeScript 编译选项:

{"compilerOptions": {"target": "ES6","module": "commonjs","strict": true,"esModuleInterop": true,"skipLibCheck": true,"forceConsistentCasingInFileNames": true,"outDir": "./dist"},"include": ["src/**/*.ts"],"exclude": ["node_modules"]
}

步骤四:初始化启动类

import express from 'express';
import path from 'path';
//解析json字符串
import bodyParser from 'body-parser';class Main {private app: express.Application;private port: number;constructor(port: number) {this.app = express();this.app.use(bodyParser.json()).use(bodyParser.urlencoded({ extended: true }));this.port = port;this.getStaticData();}public start(): void {this.app.listen(this.port, () => {console.log(`服务器已启动!`);});}public use(router: express.Router, api?: string): Main {if (api) {this.app.use(api, router);} else {this.app.use(router);}return this;}private getStaticData(): void {this.app.use('/static', express.static(path.join(__dirname, './static')));console.log('静态资源已加载');}getApp(): express.Application {return this.app;}
}const main = new Main(8080);main.start();

步骤五:初始化mysql工具文件

import { Sequelize } from 'sequelize';const sequelize = new Sequelize("sd_ai_db","root","root",{host:"localhost",dialect:"mysql",timezone: '+08:00',//配置连接池pool:{max:5,min:0,idle: 10 * 1000,}
});sequelize.authenticate().then(() => {console.log('数据库连接成功');
}).catch(err => {console.error('数据库连接失败:', err);
});export default sequelize;

步骤六:编写示例服务器接口

web层:
import express, { Request, Response } from 'express'; 
import { HelloService } from '../service/HelloService';
import helloService from '../service/HelloService';
import Result from '../model/Result';class HelloWeb {private router: express.Router;private helloService: HelloService;constructor() {this.router = express.Router();this.helloService = helloService;//注册接口this.lookStartInfo();console.log("HelloWeb初始化完毕");}public getRouter(): express.Router {return this.router;}/*** 找到服务器的全部启动记录*/private lookStartInfo(): void {this.router.get('/lookStartInfo', async (req: Request, res: Response) => {const data = await this.helloService.lookStartInfo();res.json(new Result(200, "查询成功", data));})}
}//导出接口
export default new HelloWeb().getRouter();
service层:
import HelloDao from "../dao/HelloDao";class HelloService {constructor() {this.startService();console.log("HelloService加载完毕");}public async startService(): Promise<any> {return await HelloDao.create({})}public async lookStartInfo(): Promise<any> {const data = await HelloDao.findAll();return data;}}export default new HelloService();export { HelloService };
dao层:
import { INTEGER, Model } from 'sequelize';
import mysql from '../utils/mysql';class HelloDao extends Model{}HelloDao.init({id: {type: INTEGER,primaryKey: true,autoIncrement: true}
},{sequelize:mysql,tableName: 'systems',modelName: 'system',timestamps: true
})//初始化表结构
HelloDao.sync({force:false}).then(()=>{console.log('system表初始化成功');
}).catch(()=>{console.log('system表初始化失败');
})export default HelloDao;
model类: 
class Result {private code: number;private msg: string;private data: any;constructor(code: number, msg: string, data: any) {this.code = code;this.msg = msg;this.data = data;}public getCode(): number {return this.code;}public getMsg(): string {return this.msg;}public getData(): any {return this.data;}
}export default Result;

将接口配置到index.ts中:

import express from 'express';
import path from 'path';
//解析json字符串
import bodyParser from 'body-parser';
//引入Hello接口
import Hello from './web/HelloWeb';class Main {private app: express.Application;private port: number;constructor(port: number) {this.app = express();this.app.use(bodyParser.json()).use(bodyParser.urlencoded({ extended: true }));this.port = port;this.getStaticData();}public start(): void {this.app.listen(this.port, () => {console.log(`服务器已启动!`);});}public use(router: express.Router, api?: string): Main {if (api) {this.app.use(api, router);} else {this.app.use(router);}return this;}private getStaticData(): void {this.app.use('/static', express.static(path.join(__dirname, './static')));console.log('静态资源已加载');}getApp(): express.Application {return this.app;}
}const main = new Main(8080);//引入模块
main.use(Hello, '/api');//启动服务器
main.start();

 步骤七:编写启动脚本命令

编辑package.json中的scripts启动命令,编辑完成后大概是这样:

{"name": "back","version": "1.0.0","description": "","main": "index.js","scripts": {"start": "ts-node src/index.ts","dev": "nodemon src/index.ts"},"keywords": [],"author": "","license": "ISC","dependencies": {"body-parser": "^1.20.3","express": "^4.21.2","mysql2": "^3.13.0","sequelize": "^6.37.6"},"devDependencies": {"@types/express": "^5.0.0","@types/node": "^22.13.10","nodemon": "^3.1.9","ts-node": "^10.9.2","typescript": "^5.8.2"}
}

步骤八:启动服务器

npm run dev(可以一直启动,修改代码后不用重启)

npm run start

结果:

 

补充:项目文件结构 


http://www.ppmy.cn/ops/166604.html

相关文章

蓝桥杯刷题周计划(第三周)

目录 前言题目一题目代码题解分析 题目二题目代码题解分析 题目三题目代码题解分析 题目四题目代码题解分析 题目五题目代码题解分析 题目六题目代码题解分析 题目七题目代码题解分析 题目八题目代码题解分析 题目九题目代码题解分析 题目十题目代码题解分析 前言 大家好&#…

【R语言入门】向量,存储和计算

【R语言入门】向量&#xff0c;存储和计算 Vector, Storage and Computing by R Essentials By JacksonML 前文介绍了R的基本情况&#xff0c;完成了”Hello, world!”的交互式输出。 本文简要介绍R的向量&#xff0c;以及如何存储和进行简单数学计算&#xff0c;希望对R初学…

六种最新优化算法(TOC、MSO、AE、DOA、GOA、OX)求解多个无人机协同路径规划(可以自定义无人机数量及起始点),MATLAB代码

一、算法简介 &#xff08;一&#xff09;阿尔法进化&#xff08;Alpha Evolution&#xff0c;AE&#xff09;算法 阿尔法进化&#xff08;Alpha Evolution&#xff0c;AE&#xff09;算法是2024年提出的一种新型进化算法&#xff0c;其核心在于通过自适应基向量和随机步长的…

基于小波分析法的行波测距判断故障及定位故障Matlab仿真

微♥&#xff1a;“电击小子程高兴的MATLAB小屋”获取巨额优惠 1.模型简介 本仿真模型基于MATLAB/Simulink&#xff08;版本MATLAB 2017Ra&#xff09;软件。建议采用matlab2017 Ra及以上版本打开。&#xff08;若需要其他版本可联系代为转换&#xff09; 2.建模&#xff1a…

Vue3 Pinia $subscribe localStorage的用法 Store的组合式写法

Vue3 Pinia $subscribe 可以用来监视Stroe数据的变化 localStorage的用法 localStorage中只能存字符串&#xff0c;所有对象要选转成json字符串 定义store时&#xff0c;从localStorage中读取数据talkList可能是字符串也可能是空数组 Store的组合式写法 直接使用reactiv…

【NLP】10. 机器学习模型性能评估指标(含多类别情况), ROC,PRC

机器学习模型性能评估指标&#xff08;含多类别情况&#xff09; 1. 模型评估指标简介 在机器学习中&#xff0c;模型的性能评估非常重要。常用的模型评估指标有&#xff1a; 准确率&#xff08;Accuracy&#xff09;精度&#xff08;Precision&#xff09;召回率&#xff0…

专题地图的立体表达-基于QGIS和PPT的“千层饼”视图制作实践

目录 前言 一、QGIS准备基础数据 1、QGIS 相关插件 2、图层标绘操作 二、PPT中制作 1、调整图片的规格 2、设置旋转 3、添加文字 三、总结 前言 在信息爆炸的时代&#xff0c;数据的可视化呈现变得愈发关键&#xff0c;而专题地图作为传递地理空间信息的有力工具&#…

NET进行CAD二次开发之二

本文主要针对CAD 二次开发入门与实践:以 C# 为例_c# cad-CSDN博客的一些实践问题做一些补充。 一、DLL介绍 在 AutoCAD 中,accoremgd.dll、acdbmgd.dll 和 acmgd.dll 都是与.NET API 相关的动态链接库,它们在使用.NET 语言(如 C#、VB.NET)进行 AutoCAD 二次开发时起着关…