最近想做一个自己的网站,所需去稍微学了一下node的知识,打算
搭建一个基于 Node.js、Express 和 MySQL 的后端项目涉及几个关键步骤。以下是一个简单的指南:
先说明一下我这里使用的工具基本都是最新版本,如果后期有问题再做修改
"node.js": "v20.9.0",
"npm": "10.1.0",
"express": "4.18.2",
"mysql": "2.18.1"
1、 安装 Node.js 和 npm
确保你已经安装了 Node.js 和 npm(Node 包管理器)。你可以在 Node.js 官网 上找到安装程序。
2、 创建项目目录并初始化 node.js项目
自己新创一个文件,再进入文件输入命令cmd进入终端,可以选择快捷创建命令npm init -y ,快捷创建的信息都是默认,如果想要改里面的内容,也可以在创建好的package.json中直接手动修改,如下图:
也可使用npm init 逐一输入初始化信息,其中需要输入以下配置,这里我直接将配置说明罗列出来,以便查阅;
- package name: 你的项目的名称。这是你项目的标识符,通常是小写字母,不能包含空格。这将成为你的项目的文件夹名称和生成的 package.json 文件的 “name” 属性。
- version: 你的项目的版本号。按照 Semantic Versioning 规范,通常是 1.0.0。
- description: 对你的项目的简短描述。
- entry point: 你的项目的主要入口文件,通常是 index.js 或 app.js。
- test command: 用于运行项目测试的命令。
- git repository: 你项目的 Git 仓库地址。如果你不使用 Git,你可以留空。
- keywords: 一组与你的项目相关的关键词,以空格分隔。
- author: 项目的作者。
- license: 项目的许可证。常见的选项包括 MIT、GPL-3.0、Apache-2.0 等。
- Is this OK? (yes): 最后,npm 会显示你提供的信息,并询问是否确认。如果一切都正确,你可以输入 “yes” 或直接按回车键
3、 安装依赖
1.安装 Express 和 MySQL 模块
这个时候我们就可以用vscode,打开初始化后的项目,再安装 Express 和 MySQL 模块,在终端输入以下命令即可:
npm install express mysql
2.全局安装 nodemon
要安装 nodemon
,你可以使用 npm
(Node Package Manager)。nodemon
是一个用于监视 Node.js 应用程序中文件更改并自动重新启动应用程序的工具。以下是安装 nodemon
的步骤:
- 打开命令行终端。
- 在终端中,使用以下命令安装
nodemon
:
npm install -g nodemon
这将全局安装 nodemon
,使其可以在任何项目中使用。
如果你使用的是 yarn
包管理器,可以运行以下命令:
yarn global add nodemon
- 安装完成后,你就可以在命令行中使用
nodemon
命令了。例如:
nodemon your-app.js
这将启动 your-app.js
并监视文件更改。每当你保存文件时,nodemon
将自动重新启动应用程序,使你无需手动停止和重新启动。
请注意,全局安装 nodemon
可能需要管理员权限(使用 sudo
或在 Windows 上使用管理员命令提示符)。如果你遇到权限问题,可以考虑在没有管理员权限的情况下本地安装 nodemon
:
npm install nodemon --save-dev
4、项目框架介绍
这里先考虑做一个简单项目框架,实际项目中可能需要更多的组织和配置,可能还需要考虑安全性、身份验证、错误处理等方面的内容,这里的项目暂不考虑。
node-express-mysql
|-- src
| |-- controllers
| | |-- userController.js
| |-- models
| | |-- userModel.js
| |-- routes
| | |-- userRoutes.js
| |-- utils
| | |-- database.js
|-- config
| |-- express.js
|-- app.js
|-- package.json
解析各个目录的用途:
- src 目录: src(源代码)目录存放整个应用程序的源代码。
- controllers 目录:controllers 目录包含处理路由请求的控制器文件。每个文件对应一个实体(如用户或文章),负责处理路由相关的业务逻辑。
- models 目录:models 目录存放与数据库交互的模型文件。每个文件对应数据库中的一个表,定义了模型的结构以及与数据库的交互方法。
- routes 目录:routes 目录包含应用程序的路由文件。每个文件对应一个资源(如用户或文章),定义了与该资源相关的路由。
- src/utils 目录:utils 目录可以存放一些通用的工具函数或模块,例如数据库连接模块。
- config 目录:config 目录存放配置文件。
- app.js 文件:app.js 文件是应用程序的入口文件。它初始化 Express 应用程序,连接数据库,加载路由等。
- package.json 文件:package.json 文件包含了项目的元数据和依赖信息
示例文件内容:
**src/controllers/userController.js**
:
处理路由请求的控制器,处理请求和响应;
// userController.js
const userService = require('../services/userService');
exports.getAllUsers = (req, res) => {
const users = userService.getAllUsers();
res.json(users);
};
**src/models/userModel.js**
:
对数据库进行增删改查操作;
// userModel.js
const db = require('../utils/database');
exports.getAllUsers = () => {
const sql = 'SELECT * FROM users';
return db.query(sql, []);
};
**src/routes/userRoutes.js**
:
在 Express 应用程序中添加路由和处理程序,处理来自客户端的请
// userRoutes.js
const express = require('express');
const router = express.Router();
const userController = require('../controllers/userController');
router.get('/users', userController.getAllUsers);
module.exports = router;
**src/utils/database.js**
:
使用 mysql
模块创建数据库池并暴露方便之后直接使用。确保你已经创建了数据库和需要用的表,这里我直接使用Navicat
连接mysql,再创建一个mydesign
的数据库和users表。
// database.js
const mysql = require('mysql');
// 创建数据库连接池
const pool = mysql.createPool({
connectionLimit: 10, // 限制连接数,根据实际需求调整
host: 'localhost',
user: 'your-username',
password: 'your-password',// 这里使用自己数据库的密码
database: 'your-database-name',// 创建的数据库名字
});
// 获取数据库连接池中的一个连接
exports.query = (sql, params) => {
return new Promise((resolve, reject) => {
pool.getConnection((err, connection) => {
if (err) {
console.error('Database connection error:', err);
reject(err);
} else {
connection.query(sql, params, (queryErr, results) => {
connection.release();
if (queryErr) {
console.error('Error querying the database:', queryErr);
reject(queryErr);
} else {
resolve(results);
}
});
}
});
});
};
**config/express.js**
:
存放配置文件,例如 Express 配置。在这个例子中,express.js 定义了 Express 应用程序的基本配置。
// express.js
// Configuration for Express app
const express = require('express');
const app = express();
const userRoutes = require('../routes/userRoutes');
// Add other middleware and configuration as needed
app.use('/api', userRoutes);
module.exports = app;
**app.js**
:
是应用程序的入口文件。它汇聚了各个模块,初始化 Express 应用程序,连接数据库,加载路由等
// app.js
const expressApp = require('./config/express');
const PORT = process.env.PORT || 3000;
expressApp.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
**package.json**
:
包含项目的元数据和依赖信息。在这个例子中,用于管理项目的依赖和脚本
{
"name": "your-project-name",
"version": "1.0.0",
"main": "app.js",
"scripts": {
"start": "node app.js"
},
"dependencies": {
"express": "^4.17.1",
"mysql": "^2.18.1"
}
// Add other dependencies as needed
}
5、运行应用
在命令行中运行你的应用程序:
nodemon app.js
运行以上代码后,我这里出现了一个问题:Client does not support authentication protocol requested by server; consider upgrading MySQL client
去查了一下,说mysql8的加密规则改变了导致的,可以参考 这个 重新更换一下用户root的加密规则就可以了
现在,你的 Express 应用程序应该运行在 http://localhost:3000
上。你可以通过浏览器或其他工具测试你的路由。