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

news2024/9/29 23:37:08

 项目目录结构说明:

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

导致OpenAI内乱的罪魁祸首,背后的技术是什么?

前几天围绕Sam 和 Greg和OpenAI board之间的爱恨情仇,我觉得比乡村爱情15还有意思,也达到了美剧多年未有的高度,反转反转再反转。 围绕争端的根本原因,那也是众说纷纭,不过其实有一条新闻我觉得挺值得玩味的,也是我所相信的,就是Sam在OpenAI day上发布了一个叫GP…

C++设计模式——装饰器模式

装饰器设计模式 概念应用场景优点示例示例一代码实现运行结果 示例二代码实现运行结果 示例三实现代码运行结果 总结 概念 装饰器设计模式,是C设计模式中的一种。它是一种结构型设计模式,允许向现有对象动态地添加新功能,同时又不改变其结构…

使用Python将OSS文件免费下载到本地:第一步 列举OSS文件

大家好,我是水滴~~ 本文将介绍了使用的知识点、以及列举OSS文件的代码、并对该代码进行详细解析、最后给出部署方案,希望能对你有所帮助! 《Python入门核心技术》专栏总目录・点这里 文章目录 1. 本文知识点1.1 datetime 模块1.2 OSS Python…

PyQt5连接mysql失败解决

一:背景 最近研究一个项目,里面用的Pyqt5编写的桌面应用,跑了下源码发现连接数据库那块出来问题,最终调试发现里面用的QtSql去连接mysql提示驱动找不到。 具体报错信息如下: Could not parse stylesheet of object …

使用VBA字典,进行数据分类汇总

使用VBA字典,进行数据分类汇总 VBA的字典共有两列,第一列是key,不允许有重复的元素;第二列是item,也就是key对应的值,item的值是可以有重复的值的。 字典的主要操作有读和写。 写操作 d(key)item&#…

直流电、交流电和发电机、接地、变压器

直流电 此节内容主要摘录自:图文详解直流电与直流电路基本知识 直流电是指电流方向不随时间作周期性变化,由正极流向负极,但电流的大小可能会变化的电流。直流电可以分为稳定(恒定)直流和脉动直流两种,如下…

迪文屏开发保姆级教程—背景图ICL文件生成

本篇文章主要介绍了在DGBUS平台上生成页面背景图片库,32xx.ICL文件的方法。 文章目录 一、前言 开发环境 二、具体步骤 1.打开软件 2.选定参数 3.导入背景图片 4.然后点击生成,​编辑 三、容易踩得坑 一、前言 本篇文章主要介绍了在DGBUS平台上生…

SQLturning:定位连续值范围起点和终点

在上一篇blog说到,如何去优化查询连续值范围,没看过的朋友,上篇blog链接[在此]。(https://blog.csdn.net/weixin_42575078/article/details/135067645?spm1001.2014.3001.5501) 那么今天来说说怎么将连续的数据合并,然后返回合并…

红米k40刷机澎湃OS

红米k40线刷澎湃OS,MIUI→HyperOS 1.0.23.12.9 博主自己也是个小白 rom包免费获取与体验请关注公众号:YouLinw的ROM日常 资料备份 使用小米自带的打包备份工具,将文件备份到电脑上 或使用小米自带的云服务功能,我开了会员。换了…

【数学建模】《实战数学建模:例题与讲解》第十三讲-相关分析(含Matlab代码)

【数学建模】《实战数学建模:例题与讲解》第十三讲-相关分析(含Matlab代码) 基本概念典型相关分析综合评价模型对应分析因子分析聚类分析 习题10.41. 题目要求2.解题过程3.程序 习题10.51. 题目要求2.解题过程3.程序 习题10.6(1&a…

C : DS二叉排序树之删除(详细思路解答)

Description 给出一个数据序列,建立二叉排序树,并实现删除功能 对二叉排序树进行中序遍历,可以得到有序的数据序列 Input 第一行输入t,表示有t个数据序列 第二行输入n,表示首个序列包含n个数据 第三行输入n个数据…

《PySpark大数据分析实战》-15.云服务模式Databricks介绍创建集群

📋 博主简介 💖 作者简介:大家好,我是wux_labs。😜 热衷于各种主流技术,热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员(PCTA)、TiDB数据库专家(PCTP…

FastAPI访问/docs接口文档显示空白、js/css无法加载

如图: 原因是FastAPI的接口文档默认使用https://cdn.jsdelivr.net/npm/swagger-ui-dist5.9.0/swagger-ui.css 和https://cdn.jsdelivr.net/npm/swagger-ui-dist5.9.0/swagger-ui-bundle.js 来渲染页面,而这两个URL是外网的CDN,在国内响应超…

云仓酒庄的品牌雷盛红酒LEESON分享红酒存放几年质量最佳?

云仓酒庄的品牌雷盛红酒LEESON分享对于酒的看法,有人认为“酒是陈的香”,酒越老越好。不过对于葡萄酒来说,这种说法不完全对,如果一款葡萄酒等待的时间太久,未必是件好事。对待葡萄酒也要把握一个“度”,既…

STM32启动过程

STM32启动模式(自举模式) M3/3/7等内核,复位后做的第一件事: 从地址0x0000 0000处取出栈指针MSP的初始值,该值就是栈顶地址。从地址0x0000 0004处取出程序计数器指针PC的初始值,该值是复位向量。 芯片厂商…

【BIG_FG_CSDN】*VMware17pro*Linux*Redhit6网络管理(个人向——学习笔记)

物理机中的网络 查看物理网络的方法 “网络连接”—>单点选中网络的选项-->菜单栏中“查看此连接状态”-->“详细信息” “网络连接”中的VM网卡 在主机上对应的有VMware Network Adapter VMnet1和VMware Network Adapter VMnet8两块虚拟网卡,它们分别…

Python四种配色方案,适合科研的配色

1、Plasma(等高线图颜色)2、Inferno(黑热图颜色)3、Cividis(较好的配色方案,适用于色盲)4、Viridis(绿色主导的配色方案) 下面这四种配色是不需要指定的,Pyth…

个微和企微,哪个做私域流量的优势更大?

个人微信和企业微信是目前最为常用的私域经营平台,那在功能和使用上都有哪些区别: 1、开通对象不同: 个人微信是个人用户,个人就可以申请开通使用; 企业微信则要由企业在官方网站申请开通,并完成实名认证…

泰坦陨落2找不到msvcr120文件的修复方法,分享多种解决方法

在玩泰坦陨落2这款游戏时,有些玩家可能会遇到找不到msvcr120.dll文件的问题。这个问题可能是由于游戏缺少必要的运行库导致的。下面我将分享一些解决这个问题的方法,希望对大家有所帮助。 一、问题分析 msvcr120.dll是Microsoft Visual C Redistributab…

C语言进阶第十一节 --------程序环境和预处理(包含宏的解释)

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…