Node.js+MySQL项目如何将API路由与数据库连接拆分到不同文件
代码拆分实现方案
最终项目目录结构
你的项目根目录/ ├── app.js # 服务主入口文件 ├── db.js # 数据库连接配置独立文件 └── routes.js # 业务路由独立文件
步骤1:拆分数据库配置到db.js
把原app.js中所有数据库相关的逻辑抽离到独立的db.js文件,完成后导出数据库连接实例:
const mysql = require('mysql') const connection = mysql.createConnection({ host: 'localhost', user: 'root', password: 'root', database: 'shop' }) connection.connect(error => { if (error) throw error console.log('Database server running!') }) module.exports = connection
步骤2:拆分业务路由到routes.js
使用Express内置的Router模块管理所有业务路由,引入第一步导出的数据库实例完成数据查询:
const express = require('express') const router = express.Router() const connection = require('./db') // 获取所有客户列表 router.get('/customers', (req, res) => { const sql = 'SELECT * FROM customers' connection.query(sql, (err, results) => { if (err) throw err if (results.length > 0) { res.json(results) } else { res.send('No results!') } }) }) // 根据ID获取单个客户信息 router.get('/customers/:id', (req, res) => { const { id } = req.params const sql = `SELECT * FROM customers WHERE id = ${id}` connection.query(sql, (err, result) => { if (err) throw err if (result.length > 0) { res.json(result) } else { res.send('No result!') } }) }) module.exports = router
步骤3:改写原app.js主入口文件
移除主文件中已经拆分的数据库、路由逻辑,引入路由模块完成注册:
const express = require('express') const bodyParser = require('body-parser') const PORT = process.env.PORT || 3050 const app = express() const customerRoutes = require('./routes') app.use(bodyParser.json()) // 注册路由模块 app.use('/', customerRoutes) app.get('/', (req, res) => { res.send('Welcome to my API!') }) app.listen(PORT, () => console.log(`Server running on ${PORT}`))
注意事项
- 原代码中直接拼接SQL参数的写法存在SQL注入风险,建议后续改为参数化查询写法:
// 优化后的查询写法 connection.query('SELECT * FROM customers WHERE id = ?', [id], (err, result) => { // 后续逻辑不变 }) - 所有文件创建完成后,直接执行
node app.js即可正常启动服务,原有接口访问路径完全不变。
内容的提问来源于stack exchange,提问作者chrisjericho7788
相关产品推荐
相关产品推荐

