使用Node.js连接数据库并创建一个API接口,前端可以通过HTTP请求访问后端的数据。我们可以使用Express框架来创建REST API接口,同时使用MySQL或MongoDB等数据库。
以下是如何用Node.js编写一个接口并实现数据库连接和API请求的步骤。
项目结构
app.js
: 主应用文件,配置Express和API路由routes/databaseRoutes.js
: 定义API路由controllers/databaseController.js
: 控制器层,包含具体的数据库操作config/db.js
: 配置数据库连接
步骤详解
Step 1: 初始化项目并安装依赖
初始化一个Node.js项目,并安装需要的依赖:
mkdir node-api-demo
cd node-api-demo
npm init -y
npm install express mysql2 dotenv
express
:用于创建REST APImysql2
:MySQL数据库的Node.js驱动dotenv
:用于管理环境变量
Step 2: 配置数据库连接
在项目根目录创建一个.env
文件,用于存放数据库连接信息:
.env
DB_HOST=localhost
DB_USER=your_username
DB_PASSWORD=your_password
DB_NAME=your_database
然后,在config/db.js
中创建数据库连接:
config/db.js
require('dotenv').config();
const mysql = require('mysql2');
// 创建数据库连接池
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.promise();
Step 3: 创建数据库控制器
在controllers
目录中创建databaseController.js
文件,定义获取、添加、删除数据库记录的方法。
controllers/databaseController.js
const db = require('../config/db');
// 获取所有记录
exports.getAllRecords = async (req, res) => {
try {
const [rows] = await db.query('SELECT * FROM records');
res.json(rows);
} catch (err) {
res.status(500).json({ error: '数据库查询出错' });
}
};
// 根据ID获取记录
exports.getRecordById = async (req, res) => {
const id = req.params.id;
try {
const [rows] = await db.query('SELECT * FROM records WHERE id = ?', [id]);
if (rows.length === 0) {
return res.status(404).json({ error: '记录未找到' });
}
res.json(rows[0]);
} catch (err) {
res.status(500).json({ error: '数据库查询出错' });
}
};
// 添加新记录
exports.createRecord = async (req, res) => {
const { name, value } = req.body;
try {
const [result] = await db.query('INSERT INTO records (name, value) VALUES (?, ?)', [name, value]);
res.status(201).json({ id: result.insertId, name, value });
} catch (err) {
res.status(500).json({ error: '数据库插入出错' });
}
};
// 根据ID删除记录
exports.deleteRecord = async (req, res) => {
const id = req.params.id;
try {
const [result] = await db.query('DELETE FROM records WHERE id = ?', [id]);
if (result.affectedRows === 0) {
return res.status(404).json({ error: '记录未找到' });
}
res.json({ message: '记录已删除' });
} catch (err) {
res.status(500).json({ error: '数据库删除出错' });
}
};
评论 (0)