个人简介
👨💻个人主页: 魔术师
📖学习方向: 主攻前端方向,正逐渐往全栈发展
🚴个人状态: 研发工程师,现效力于政务服务网事业
🇨🇳人生格言: “心有多大,舞台就有多大。”
📚推荐学习: 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js实战 🍒Three.js 🍇鸿蒙开发🥭小程序
🪧使用备注:仅供学习交流 严禁用于商业用途 ,若发现侵权内容请及时联系作者
📤更新进度:持续更新内容
🤙个人名片:每篇文章最下方都有加入方式,旨在交流学习&资源分享,快加入进来吧
文章目录
1. 本机配置
类别 | 详情 |
---|---|
设备型号 | MacBook Pro(13 英寸) |
设备名称 | MacBook Pro |
处理器 | 2.3 GHz 四核 Intel Core i7 |
内存 | 32 GB 3733 MHz LPDDR4X |
操作系统 | macOS Sequoia(版本 15.4.1) |
2. 项目结构
nodejs-crud-api/
├── config/
│ └── db.js # 数据库配置
├── models/
│ └── user.model.js # 数据模型
├── controllers/
│ └── user.controller.js # 业务逻辑
├── utils/
│ └── tools.js # 工具类
├── routes/
│ └── user.routes.js # 路由定义
├── .env # 环境变量
├── server.js # 主入口文件
└── package.json
3. 搭建环境和依赖
3.1 初始化项目
新建一个
nodejs-crud-api
文件夹,右键用VSCode打开。输入命令初始化。
mkdir nodejs-crud-api
cd nodejs-crud-api
npm init -y
⚠️注意!Windows系统的朋友们,mysql的库使用mysql就可以。这里我用的mysql的库是mysql2
3.2 安装依赖
npm install express mongoose dotenv cors body-parser mysql2 nodemon
nodemon
安装并不是强制的,安装了之后可以不用每次都重启服务器进行更新, 大家可以视个人情况而定。
3.3 创建配置文件
config/db.js
/** 引入mysql2模块 Windows朋友用mysql就可以 **/
const mysql = require('mysql2');
require('dotenv').config();// 加载 .env 文件
/** 新建数据库连接 **/
const pool = mysql.createConnection({
host: '127.0.0.1',
/** 填写你自己mysql的用户名 **/
user: 'root',
/** 填写你自己mysql的密码 **/
password: 'hanweb@123',
/** 输入你自己新建的数据库的名称 **/
database: 'MyDB',
port: 3306
});
// 使用 Promise 封装
const promisePool = pool.promise();
// 添加 query 方法
promisePool.query = async (sql, params) => {
try {
const [rows] = await promisePool.execute(sql, params);
console.log('Query:', sql, params);
return [rows];
} catch (error) {
console.error('Query Error:', error);
throw error;
}
};
module.exports = promisePool;
// 在文件末尾添加
(async () => {
try {
const [rows] = await promisePool.query('SELECT 1 + 1 AS solution');
console.log(`✅ 数据库连接成功: 1 + 1 = ${
rows[0].solution}`);
} catch (error) {
console.error('❌ 数据库连接失败:', error.message);
console.error('请检查 .env 文件配置和 MySQL 服务状态');
}
})();
3.4 创建数据模型
models/user.model.js
// models/userModel.js
// 正确导入数据库连接模块
const db = require('../db/connection'); // 确保路径正确
class User {
// 获取所有用户
static async getAll () {
try {
console.log('getAll');
const [rows] = await db.query('SELECT * FROM user');
return rows;
} catch (error) {
console.error('获取所有用户失败:', error);
throw error;
}
}
// 根据 ID 获取用户
static async getById (userId) {
try {
const [rows] = await db.query('SELECT * FROM user WHERE userId = ?', [userId]);
return rows[0];
} catch (error) {
console.error(`获取用户 ${
userId} 失败:`, error);
throw error;