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

 项目目录结构说明:

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().portconsole.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中请求该接口响应内容如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/287114.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在4*4的平面上计算2a1+1+1

0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 在4*4的平面上有2个点,保持2a1的结构,然后向剩余的14个格子里随机扔2个石子。 共有14*13/291种可能 1 - - - 2 - - - 3 - - 1 4 - - - 1 1 - 1 1 - - - - - - - 1 - - …

深度剖析知识图谱:方法、工具与实战案例

💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 知识图谱作为一种强大的知识表示和关联技术&am…

非递归实现的快速排序

目录 序列文章 前言 学前补充 非递归快速排序 注意事项(重要) 实现步骤 代码实现 时空复杂度 快速排序的特性 栈的相关代码 序列文章 非递归实现的快速排序:http://t.csdnimg.cn/UEcL6 快速排序的挖坑法与双指针法:ht…

创建自定义 gym env 教程

gym-0.26.1 pygame-2.1.2 自定义环境 GridWolrdEnv 教程参考 官网自定义环境 ,我把一些可能有疑惑的地方讲解下。 首先整体文件结构, 这里省略了wrappers gym-examples/main.py # 这个是测试自定义的环境setup.py gym_examples/__init__.pyenvs/__init__.pygri…

【NI-RIO入门】扫描模式

于NI KB摘录 所有CompactRIO设备都可以访问CompactRIO扫描引擎和LabVIEW FPGA。 CompactRIO 904x 系列是第一个引入 DAQmx 功能的产品线。 扫描引擎(IO 变量) – 主要为迁移和初始开发而设计。控制循环频率高达 1 kHz1,性能控制器上的频率更…

【ArkTS】路由传参

传参 使用router.pushUrl(),router.push()官方不推荐再使用了。 格式: router.pushUrl({url: 路由地址,params:{参数名:值} )跳转时需要注意路由表中是否包含路由地址。 路由表路径: entry > src > main > resources &g…

专栏十六:bulk以及单细胞空转中的progeny通路分析

progeny本身有自己的R包,可以提取通路基因集信息,团队把他嵌入另一个R包decoupleR中完成富集分析。decoupleR自己有详细的针对bulk和scRNAseq的教程 简单安装一下 devtools::install_github(saezlab/OmnipathR) devtools::install_github("saezlab/progeny") Bio…

Sectigo DV多域名证书能保护几个域名

多域名SSL证书不限制受保护的域名的类型,可以时多个主域名或者子域名,多域名SSL证书都可以同时保护,比较灵活。但是,多域名https证书并不是免费无限制保护域名数量,一把的多域名SSL证书默认保护3-5个域名记录&#xff…

LVS+Keepalived 高可用集群

一.Keepalived工具介绍 1.支持故障自动切换(Failover) 2.支持节点健康状态检查(Health Checking) 3.基于vrrp协议完成地址流动 4.为vip地址所在的节点生成ipvs规则(在配置文件中预先定义) 5.为ipvs集群的各RS做健康状态检测 6.基于脚本调用接口完成脚本中定义的功能&…

沙盘模型3D打印加工服务建筑设计模型3D打印展览展示模型3D打印-CASAIM

随着3D打印技术的不断发展,沙盘模型3D打印已经成为建筑行业中的一项创新应用。这种技术能够将设计师的创意以实体形式呈现,为建筑项目的沟通和展示提供了更加直观和便捷的方式。本文将介绍CASAIM沙盘模型3D打印的优势和应用。 一、CASAIM沙盘模型3D打印的…

你在为其他知识付费平台做流量吗?

随着知识付费市场的蓬勃发展,越来越多的知识提供者选择将自己的课程放到各大知识付费平台上进行销售。然而,你是否意识到,你正在为这些平台做流量、做数据、做流水、做品牌,而卖出去的课程平台还要抽取你的佣金? 如果…

三菱PLC FX3U滑动平均值滤波

三菱PLC滑动平均值滤波其它相关写法,请参考下面文章链接: https://rxxw-control.blog.csdn.net/article/details/125044013https://rxxw-control.blog.csdn.net/article/details/125044013滑动平均值滤波程序总共分为三部分,第一步为:滑动采样。 第二步为:队列求和,第三…