1、主要结构
server.js
const express = require('express');
const test = require('./testRouter'); // 导入 testRouter.js 中的路由实例
const app = express();
// 将 testRouter 挂载到应用的某个路径上
app.use('/test', test); // 现在,访问 /test/ 会触发 testRouter.js 中的路由处理函数
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
testRouter.js
const express = require('express');
const router = express.Router();
// 为这个路由定义一个处理函数
router.get('/', (req, res) => {
res.send('This is the test route!');
});
// 导出路由实例
module.exports = router;
2、实例
以连接本地MySQL为例
server.js
const express = require('express');
const app = express();
//需要什么路由就搭载什么路由
const userRoutes = require('./userRoutes'); // 引入user路由模块
const userInfoRoutes = require('./userInfoRoutes'); // 引入userInfoRoutes路由模块
const IPAddress = '127.0.0.1'; // MySQL服务器的IP地址
const PORT = 3000; // 服务器监听端口
//将路由挂在到app上的某个路径上
app.use('/userRoutes', userRoutes);//现在访问/userRoutes 会触发 userRoutes.js中的处理函数
app.use('/userInfoRoutes', userInfoRoutes);//现在访问/userInfoRoutes 会触发 userInfoRoutes.js中的处理函数
app.listen(PORT, () => {
console.log(`Server is running at http://${IPAddress}:${PORT}`);
});
userRouter.js
const express = require('express');
const mysql = require('mysql');
const router = express.Router();
// 配置 MySQL 连接
const dbConfig = {
host: '127.0.0.1',
user: 'root',//MySQL账号
password: '123456',//MySQL密码
database: 'user'//数据库
};
// 创建数据库连接池
const pool = mysql.createPool(dbConfig);
// 检查连接是否成功
pool.getConnection((err, connection) => {
if (err) {
if (err.code === 'PROTOCOL_CONNECTION_LOST') {
console.error('数据库连接丢失');
}
if (err.code === 'ER_CON_COUNT_ERROR') {
console.error('数据库连接数超出限制');
}
if (err.code === 'ECONNREFUSED') {
console.error('数据库连接被拒绝');
}
console.error('连接池初始化失败: ', err);
return;
}
console.log('数据库user连接池初始化成功');
connection.release(); // 使用完毕后释放连接
});
// 获取用户列表
router.get('/getUser', (req, res) => {
// 查询user列表的逻辑
pool.query('SELECT * FROM user', (error, results, fields) => {
if (error) {
return res.status(500).send('查询失败: ' + error);
}
res.json(results);
});
});
// ...(导出路由模块)
module.exports = router;
最后在终端中打开至该项目,输入node /server.js ,当出现“数据库user连接池初始化成功”就完成了
后续只需要访问 http://127.0.0.1:3000/userRouter/getUser 即可获取到用户列表
别的路由只需要将userRouter改为相应的路径
## 增删改查 ##
前面只是举例了查询,下面还有添加,修改以及删除。
// 使用内置的JSON解析中间件
router.use(express.json());
// 添加用户
router.post('/addUser', (req, res) => {
// 添加user的逻辑
const { name,phone,age } = req.body;//获取前端传来所需添加的用户信息
pool.query('INSERT INTO user ( name,phone,age ) VALUES (?,?,?)', [ name,phone,age ], (error, results, fields) => {
if (error) {
return res.status(500).send('新增失败: ' + error);
}
res.send('新增成功');
});
});
//更新用户
router.put('/updateUser', (req, res) => {
// 更新user的逻辑
const { name,phone } = req.body; //更新姓名为name的手机号为phone
pool.query('UPDATE user SET phone = ? WHERE name = ?', [ phone, name ], (error, results, fields) => {
if (error) {
return res.status(500).send('更新失败: ' + error);
}
if (results.affectedRows === 0) {
return res.sendStatus(404);
}
res.send('更新成功');
});
});
// 删除用户
router.delete('/deleteUser:name', (req, res) => {
// 前面是用data传值,这里是直接在URL路径中传值,这里需要注意在name前面加“:” 两个用法都可用,参数多建议用data
// 从参数中获取name
const name = req.params.name;
// 删除user的逻辑
pool.query('DELETE FROM user WHERE name = ?', [name], (error, results, fields) => {
if (error) {
return res.status(500).send('删除失败: ' + error);
}
if (results.affectedRows === 0) {
return res.sendStatus(404);
}
res.send('删除成功');
});
});
## 前端 ##
以小程序为例:
//获取用户列表
wx.request({
url: 'http://127.0.0.1:3000/userRouter/getUser',
success: (res)=> {
console.log("用户列表:"+res.data);
}
})
//添加用户
wx.request({
url: 'http://127.0.0.1:3000/userRouter/addUser',
method: 'POST',
data:{
name:"张三",
phone:"12345678900",
age:"20"
},
header:{
'Content-Type': 'application/json'
},
success: (res)=> {
if (res.statusCode == 200) {
console.log("添加成功");
wx.showToast({
title: '添加成功',
})
}
}
})
//更新用户信息
var data = {
name:"张三",
phone:"01234567890"
}
wx.request({
url: 'http://127.0.0.1:3000/userRouter/updataUser',
method: 'PUT',
data:data,
header: {
'Content-Type': 'application/json'
},
success: (res)=> {
if (res.statusCode == 200) {
console.log("更新成功");
wx.showToast({
title: '更新成功',
})
}
}
})
//删除用户
var name="张三"
wx.request({
url: 'http://127.0.0.1:3000/userRouter/deleteUser?name='+name,
method: 'DELETE',
success:(res)=> {
if (res.statusCode == 200) {
console.log("删除成功");
wx.showToast({
title: '删除成功',
})
}
}
/*
success: (res) => {
if (res.statusCode === 200) {
// 检查响应数据以确保删除成功(如果API有返回相关信息)
if (res.data && res.data.success) { // 假设服务器返回了包含success字段的对象
console.log("删除成功");
wx.showToast({
title: '删除成功',
icon: 'success',
duration: 2000
});
} else {
console.error("删除操作未成功执行");
wx.showToast({
title: '删除失败',
icon: 'none',
duration: 2000
});
}
} else {
console.error('请求失败', res.statusCode);
wx.showToast({
title: '请求失败',
icon: 'none',
duration: 2000
});
}
},
fail: (err) => {
console.error('请求发送失败', err);
wx.showToast({
title: '请求发送失败',
icon: 'none',
duration: 2000
});
}
*/
})
最下面注释处为标准的错误处理。我们不能只对成功进行处理,合理的处理错误情况能有效地发现问题出在哪里