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().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.mfbz.cn/a/257701.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

window10下载与安装zookeeper,图文说明

1,下载 打开连接 ;https://downloads.apache.org/zookeeper/ 选择版本下载 2,解压 cmd黑窗口解压命令 tar -zxvf apache-zookeeper-3.8.3-bin3,修改配置 复制zoo_sample.cfg,重命名为zoo.cfg zoo.cfg配置 # The …

操作系统系列:Unix进程系统调用fork,wait,exec

操作系统系列:Unix进程系统调用 fork系统调用fork()运用的小练习 wait系统调用Zombiesexec 系列系统调用 开发者可以查看创建新进程的系统调用,这个模块会讨论与进程相关的Unix系统调用,下一个模块会讨论Win32 APIs相关的进程。 fork系统调用…

uniapp-安卓APP开发时使用手机调试

调试 1. 手机打开开发者模式: 华为手机举列-->设置-->关于手机-->版本号,多次连续点击“版本号”,就会提示已打开开发者模式 2. 华为手机举列-->设置-->系统和更新-->开发人员选项-->打开 USB调试,进入调试模式 3. 先…

硬件基础--实施运维工程师介绍

1.实施运维工程师介绍 1.1 什么是实施工程师 1.2 是实施工程师的职责 1.3 什么是运维工程师? 1.4 运维工程师的职责 1.5 实施运维的主要技能 2.计算机组件 3.BIOS介绍 ​编辑 4.总结 1.实施运维工程师介绍 1.1 什么是实施工程师 常用操作系统、应用软件及公…

scrapy快加构造并发送请求

scrapy数据建模与请求 学习目标: 应用 在scrapy项目中进行建模应用 构造Request对象,并发送请求应用 利用meta参数在不同的解析函数中传递数据 1. 数据建模 通常在做项目的过程中,在items.py中进行数据建模 1.1 为什么建模 定义item即提前…

使用bs4 分析html文件

首先需要 pip install beautifulsoup4安装 然后为了方便学习此插件,随便打开一个网页,然后鼠标右键,打开源网页,如下图片 这样就可以获得一个网页源码,全选复制粘贴到本地,存储为 .html 文件,…

SpringBoot日志

目录 日志 日志使用 观察日志结构 打印日志 日志框架 门面模式(外观模式) SLF4J框架 日志格式 日志级别 日志配置 配置日志级别 配置控制台颜色 配置日志格式 日志持久化 日志文件分割 更简单的方式---Lombok框架支持 日志 日志作用&…

Tomcat多实例、负载均衡、动静分离

Tomcat多实例部署 安装jdk [rootlocalhost ~]#systemctl stop firewalld.service [rootlocalhost ~]#setenforce 0 [rootlocalhost ~]#cd /opt [rootlocalhost opt]#ls apache-tomcat-8.5.16.tar.gz jdk-8u91-linux-x64.tar.gz rh [rootlocalhost opt]#tar xf jdk-8u91-linu…

C# WPF上位机开发(crc校验)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 为了验证数据传输的过程中有没有发生翻转,我们在传输报文的同时一般还会添加一个crc校验。对于modbus协议也是一样,它在数据…

Jmeter中使用py插件

-安装插件 1、下载插件jython-standalone-2.7.0.jar到jmeter的lib\ext目录下 链接: https://pan.baidu.com/s/13ZXtUwoQEV62M98GaIR26w 提取码:ioyk 2、重启jmeter,查看是否生效,如果这个语言有python的选项说明可以了&#xf…

Excel怎样统计一列中不同的数据分别有多少个?

文章目录 1.打开Excel数据表2.选择“插入”,“数据透视表”3.选择数据透视表放置位置4.将统计列分别拖到“行”和“数值”区间5.统计出一列中不同的数据分别有多少个 1.打开Excel数据表 2.选择“插入”,“数据透视表” 3.选择数据透视表放置位置 4.将统计…

【Ehcache技术专题】「入门到精通」带你一起从零基础进行分析和开发Ehcache框架的实战指南(3-储存方式)

这里写目录标题 Ehcache的存储方式堆内存(MemoryStore)指定可用内存Xml代码Xml代码Xml代码 驱除策略元素过期Xml代码 非堆内存(BigMemory)磁盘(DiskStore)指定可用容量Xml代码 元素过期 Ehcache的存储方式 …

PyCharm关闭项目很慢

我的版本: PyCharm 2023.2.5 (Professional Edition) 问题: 关闭项目的时候显示一直在关闭项目 (单次解决:任务管理器里面杀掉PyCharm) 解决方案: 在PyCharm中按下快捷键 CtrlShiftA。 输入Registry或…

python画图【01】

前提:使用anaconda环境,且安装好,使用的是jupyter pandas 和 matplotlib 安装教程可以参考:miniconda安装与使用 import pandas as pd读取xlsx表格数据 data pd.read_excel("data1.xlsx",sheet_nameSheet1) #data p…

vue内容渲染

内容渲染指令用来辅助开发者渲染DOM元素的文本内容。常用的内容渲染指令有3个 1.v-text 缺点:会覆盖元素内部原有的内容 2.{{}}:插值表达式在实际开发中用的最多,只是内容的占位符,不会覆盖内容 3.v-html:可以把带有标…

详细教程 - 进阶版 鸿蒙harmonyOS应用 第十二节——鸿蒙操作系统中的动画效果封装:Java和TypeScript版

简介 动画效果是开发鸿蒙应用时的一个重要功能。在这篇文章中,我们将详细探讨如何在鸿蒙系统中使用Java和TypeScript实现动画效果的封装,并提供一些代码示例。 Java版动画效果的实现 在鸿蒙操作系统中,我们可以使用ohos.agp.animation.Anima…

基于SSM的马病管理系统的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

MyBatis首次使用并查询数据库中表的数据

文章目录 MyBatis首次使用并查询数据库中表的数据1、传统Jdbc代码问题分析传统JDBC存在的问题 2、MyBatis框架概述3、MyBatis入门案例3.1、使用idea创建一个maven项目后,修改pom.xml文件中内容为:3.2、在src-main-resources下创建log4j.properties和myba…

APM联合gazebo进行固定翼仿真

一、事情起因 由于项目使用的是固定翼飞机,然后又要求使用的是APM固件,所以之前对PX4固件就需要从新来过。 1.1 APM的飞行模式 固定翼常见的飞行模式 MANUAL:手动模式 等效于不加飞控直接使用遥控器控制飞机。FBWA:fly by wir…

深度学习 Day19——P8YOLOv5-C3模块实现

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 文章目录 前言1 我的环境2 代码实现与执行结果2.1 前期准备2.1.1 引入库2.1.2 设置GPU(如果设备上支持GPU就使用GPU,否则使用C…
最新文章