Node.js使用Express框架写服务端接口时,如何将接口拆分到不同文件中

 项目目录结构说明:

在mysql中创建数据库zw_blog,在该数据库下创建用户表,博客表,博客分类表

// 创建数据库zw_blog;
create database zw_blog;
use zw_blog;


// 创建用户表,并设置主键id自增长
create table tb_user (
    id int auto_increment primary key,
    username varchar(100),
    password varchar(100)
)

// 创建博客分类表,博客和分类是多对一的关系
create table tb_blog_type (
    id bigint auto_increment primary key not null,
    name varchar(255) not null // 分类名称
)

// 创建博客表
create table tb_blog (
    id bigint auto_increment primary key,
    typeId int,	// 博客分类id
    title varchar(255),  // 标题
    content longtext, // 内容
    firstPicture varchar(255), // 首图地址
    published int not null, // 是否发布
    createTime datetime,
    updateTime datetime,  // 更新事件
    description text, // 博客描述
    views int null,	// 浏览次数
    status int not null default 1,	// 是否删除,0-已被删除,页面不显示,1-未删除
)

 node.js连接mysql数据库步骤可参考:Node.js 连接 MySQL | 菜鸟教程

1、拆分之前的写法,未区分模块,所有接口api都写在了入口文件app.js中;

需求:想要将接口api拆分成根据不同的业务模块放到不同的文件中管理,而不是在入口文件中写到底、

拆分之前的app.js:

// app.js文件
const express = require('express')
var bodyParser = require('body-parser');
// 导入数据库操作模块
const db = require('./db/mysql')
// 导入 session 中间件
var session = require('express-session')
const cors = require('cors')  // express的中间件,用来解决跨域问题

// 创建web服务器
const app = express()

// 调用app.listen(端口号, 启动成功后的回调函数)  启动服务器
var server = app.listen(8081, () => {
  var port = server.address().port
  console.log("应用访问地址为 http://127.0.0.1:%s", port)
})

// 跨域
app.use(cors())

// session中各字段介绍:https://www.dandelioncloud.cn/article/details/1611667482941292545
app.use(session({
  name: 'node-blog-sid',  //cookie的名字,默认为'connect.sid'
  secret: 'keyboard cat',  // secret 属性的值可以为任意字符串,用于对session、cookie签名,防止篡改
  resave: false,           // 固定写法
  saveUninitialized: true  // 固定写法
}))

app.use(express.json())
//Context-Type 为application/x-www-form-urlencoded 时 返回的对象是一个键值对,当extended为false的时候,键值对中的值就为'String'或'Array'形式,为true的时候,则可为任何数据类型。
app.use(bodyParser.urlencoded({ extended: true }));
//用于解析json 会自动选择最为适宜的解析方式于解析json 会自动选择最为适宜的解析方式
app.use(bodyParser.json());

// 查询用户列表接口
app.post('/zw-blog-api/userList', function (req, res) {
  const sqlStr = 'select id,username,password from tb_user;'
  db.query(sqlStr, (err, results) => {
    // 查询数据失败
    if (err) return console.log('查询数据库出错了:',err.message)
    // 查询数据成功
    ...
  })
})

2、示例:将app.js文件中的 “/zw-blog-api/userList”接口api拆分到user模块中;

1)将“/zw-blog-api/userList”接口拆分到对应的user.js文件中(这里文件名根据实际情况修改)

// api/user.js文件,存放user模块的相关接口

// 连接mysql数据库相关文件
const db = require('../db/mysql')

// express框架的路由
const app = require("express").Router()

// 查询所有的用户
app.post('/userList', function (req, res) {
  db.query(queryStr, (err,result) => {
  	...
  })
})

2)在app.js主文件中注册该文件即可; 

 // 注册方案1:一个文件一个文件进行注册
const app = express()
app.use(`/zw-blog-api`, require('./api/user'))

// 注册方案2: (选择此种方式,后续加入新模块时无需修改入口文件)
// ./api/index 路径的文件,在该文件中引入所有模块的api文件;
const user = require('./user')
...

module.exports = {
  user,
  ...
}

// 入口文件:app.js文件
const moduleApi = require('./api/index')
const app = express()

// 将导出的文件进行注册
for (const key in moduleApi) {
  app.use(`/zw-blog-api`, moduleApi[key])
}

3、在postman中请求该接口响应内容如下:

项目代码已上传到github,有需要的同学可下载查看;GitHub - 809877665/node-mysql-blog-manager: nodejs+mysql+express实现的博客后台增删改查API

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wen_文文

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值