Node搭建后端框架【模块化,使用MySQL】

news/2024/11/17 16:32:41/

这篇文章可能和一般的使用express不到10行代码构建一个服务器不太一样,因为我之前有使用过springboot进行后端框架的搭建,所以感觉这种方法虽然简单,但是可能就缺乏扩展性规范性

0.项目背景

当前我正在开发一个自己使用的小型项目,由于是小型项目而且仅自己使用,所以感觉就没必要直接上SpringBoot作为后端框架,而且我希望能接触到更多的东西,于是选择使用NodeJS作为后端服务器。

1.安装NodeJS和MySQL

首先要保证你的电脑中有Node和MySQL,如果没有的话,可以参考以下教程

安装Node.js
安装MySQL— 5.7.19(超详细–图文教程)

2.创建一个Node.js项目

在你需要放NodeJS后端的位置打开cmd

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BIGjDKkD-1679731516961)(assets/image-20230325144650-n69gn7l.png)]

创建项目目录

mkdir 你的文件名

进入目录

cd 你的文件名

初始化项目

npm init

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yu0bJc3a-1679731516962)(assets/image-20230325144727-2v432m5.png)]

没有什么特殊要求直接默认Enter即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GrS5zpr0-1679731516963)(assets/image-20230325144818-9lm7yss.png)]

3.安装必要模块

通过vscode打开刚才创建的文件夹,安装以下模块

  • express:一个流行的 Web 框架,用于搭建 Web 服务器和处理 HTTP 请求。
  • mysql2:一个 MySQL 的 Node.js 驱动程序,用于连接和操作 MySQL 数据库。
  • dotenv:一个用于从 .env 文件中加载环境变量的模块,可以帮助你安全地管理敏感信息,例如数据库密码。

你可以使用以下命令安装这些模块:

npm install express mysql2 dotenv forwarded

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fzJ3OLMz-1679731516963)(assets/image-20230325145000-j1v7c2c.png)]

这里安装的时候可能会被系统代理(魔法)影响,所以请先关闭魔法之后再进行安装

等待安装成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yUf5bDnE-1679731516963)(assets/image-20230325145558-veas19r.png)]

4.创建HTTP服务器

根目录 下创建一个index.js文件

使用 express 模块创建一个 HTTP 服务器非常简单,你只需要编写以下代码:

const express = require('express');
const app = express();app.get('/', (req, res) => {res.send('Hello, world!');
});app.listen(3000, () => {console.log('Server is running on port 3000');
});

启动服务器

node index.js

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vSgYu5d7-1679731516963)(assets/image-20230325150205-4823l29.png)]

这个代码会创建一个 HTTP 服务器,监听在 localhost:3000 上。当你在浏览器中访问 http://localhost:3000 时,你将看到一个显示“Hello, world!”的页面。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ntNvnilH-1679731516964)(assets/image-20230325150220-njvwhv4.png)]

5.连接MySQL数据库(service)

创建一个数据库

首先需要创建一个后续需要使用的数据库,可以通过workbench或sqlserver等工具

create database 数据库名

创建.env文件配置mysql

DB_HOST=localhost
DB_USER=root
DB_PASSWORD=你的密码
DB_NAME=数据库的名称

创建目录serviceindex.js

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o2rioPc1-1679731516964)(assets/image-20230325151256-c7et4i4.png)]

编辑index.js

使用 mysql2 模块连接到 MySQL 数据库也很简单。你只需要编写以下代码:

const mysql = require('mysql2/promise');
require('dotenv').config();const pool = mysql.createPool({host: process.env.DB_HOST,user: process.env.DB_USER,password: process.env.DB_PASSWORD,database: process.env.DB_NAME
});module.exports = pool;

6.创建路由 和 controller

这里的路由不是我们前端页面的路由,而是一个路由对应一个请求地址

创建目录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6qwnmd6S-1679731516964)(assets/image-20230325160355-j3394x0.png)]

创建一张数据表格

创建一张表格,测试是否连接上数据库

const pool = require("../../service/index")async function createTimeTable(req, res) {try {await pool.query(`CREATE TABLE IF NOT EXISTS time_record (id INT AUTO_INCREMENT PRIMARY KEY,time date NOT NULL,name VARCHAR(255) NOT NULL,tag VARCHAR(255) NOT NULL,duration smallint NOT NULL)`);res.status(200).send('Time table created successfully!');} catch (error) {console.error('Error creating time table:', error);res.status(500).send('Failed to create time table');}
}module.exports = {createTimeTable,
}

创建一个router对应

const express = require('express');
const router = express.Router();
const timeController = require('./time');router.get('/create', timeController.createTimeTable)module.exports = router

7.启动服务器

修改index.js

const express = require('express');
const app = express();
const routes = require('./controller/router');
require('dotenv').config();app.use(express.json());
app.use(routes);const port = process.env.PORT || 3000;
app.listen(port, () => {console.log(`Server is running on port ${port}`);
});

访问地址localhost:3000/create

这里的create是对应之前设置的 route

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jYhG3LjD-1679731516964)(assets/image-20230325154909-nfoetcb.png)]

创建成功

我们去workbench中去看看

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SPjI9WRu-1679731516965)(assets/image-20230325154940-2mtvojw.png)]

是存在的!证明整体的是没问题的


当前只是简单的搭好了整体的框架,后续将需要我们进行各个模块的填充和业务逻辑的实现


http://www.ppmy.cn/news/35175.html

相关文章

K8S + GitLab + Jenkins自动化发布项目实践(一)

K8S GitLab Jenkins自动化发布项目实践(一)发布流程设计安装Docker服务部署Harbor作为镜像仓库部署GitLab作为代码仓库常用Git命令发布流程设计 #mermaid-svg-pe9VmFytb9GmqMvG {font-family:"trebuchet ms",verdana,arial,sans-serif;font-…

Python解题 - CSDN周赛第40期

上期问哥没参加,但从赛后大家的反馈来看,又出现了数据上的bug,使用 python 的朋友会遇到第二个用例的柱子高度数组长度不够,200根柱子,只有179个数据,这让人怎么玩?但是用C的选手就没有这个问题…

JVM学习.04. Java内存模型与线程模型

1、前言该篇内容主要介绍JVM如何实现多线程,多线程间由于共享和竞争数据而导致的一系列问题以及解决方案。2、内存模型(JMM)Java内存模型(Java Memory Model,简称JMM)的主要目的是定义程序中各种变量的访问…

回流和重绘

系列文章目录 前端系列文章——传送门 JavaScript系列文章——传送门 文章目录系列文章目录1、浏览器渲染过程2、回流3、重绘4、优化4.1、合并样式修改4.2、批量操作DOM4.3、避免多次触发布局4.4、修改批量设置样式函数我们在做案例的时候,通常一个标签要设置很多样…

【嵌入式烧录/刷写文件】-1-详解Motorola S-record(S19/SREC/mot/SX)格式文件

目录 1 什么是Motorola S-record 2 Motorola S-record的格式 2.1 Motorola S-record的结构 2.1.1 “Record type记录类型”的说明 2.1.2 “Record length记录长度”的说明 2.1.3 如何计算“Checksum校验和” 2.2 Record order记录顺序 2.3 Text line terminator文本行终…

Python深度学习实战:人脸关键点(15点)检测pytorch实现

引言 人脸关键点检测即对人类面部若干个点位置进行检测,可以通过这些点的变化来实现许多功能,该技术可以应用到很多领域,例如捕捉人脸的关键点,然后驱动动画人物做相同的面部表情;识别人脸的面部表情,让机…

动态规划---线性dp和区间dp

动态规划(三) 目录动态规划(三)一:线性DP1.数字三角形1.1数字三角形题目1.2代码思路1.3代码实现(正序and倒序)2.最长上升子序列2.1最长上升子序列题目2.2代码思路2.3代码实现3.最长公共子序列3.1最长公共子序列题目3.2代码思路3.3代码实现4.石子合并4.1题目如下4.2代…

【Java】注解与反射

学习视频:【狂神说Java】注解和反射_哔哩哔哩_bilibili Java内存分析 #mermaid-svg-5DVSYhOqC0pHFfwe {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-5DVSYhOqC0pHFfwe .error-icon{fill:#552222;}#merm…