路由的模块化node.js+express篇(挂载)

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  
        });  
      }
    */
    })

最下面注释处为标准的错误处理。我们不能只对成功进行处理,合理的处理错误情况能有效地发现问题出在哪里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值