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.rhkb.cn/news/221522.html

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

相关文章

大型语言模型:RoBERTa — 一种稳健优化的 BERT 方法

slavahead 一、介绍 BERT模型的出现BERT模型带来了NLP的重大进展。 BERT 的架构源自 Transformer,它在各种下游任务上取得了最先进的结果:语言建模、下一句预测、问答、NER标记等。 尽管 BERT 性能出色,研究人员仍在继续尝试其配置&#xff0…

旅游景区项目信息化建设运营方案:PPT47页,附下载

关键词:智慧景区解决方案,智慧景区建设,智慧景区开发与管理,智慧景区建设的意义,智慧景区管理 一、旅游景区项目信息化建设背景 1、旅游业发展迅速:随着旅游业的不断发展,游客对旅游体验的需求…

多级缓存:亿级流量的缓存方案

文章目录 一.多级缓存的引入二.JVM进程缓存三.Lua语法入门四.多级缓存1.OpenResty2.查询Tomcat3.Redis缓存预热4.查询Redis缓存5.Nginx本地缓存6.缓存同步 一.多级缓存的引入 传统缓存的问题 传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未…

【LeetCode刷题】--245.最短单词距离III

245.最短单词距离III class Solution {public int shortestWordDistance(String[] wordsDict, String word1, String word2) {int len wordsDict.length;int ans len;if(word1.equals(word2)){int prev -1;for(int i 0;i<len;i){String word wordsDict[i];if(word.equa…

Xcode 恢复Discard Changes

当开发的时候&#xff0c;Discard All Changes后 文件的修改都被放弃了&#xff0c;怎么才可以撤销更改呢 Xcode和Git没有这个功能&#xff0c;Finder可以实现 首先我们先退出Xcode用TextEdit打开你想恢复的文件转到文件 > 还原到 > 浏览所有版本...选择你想恢复的版本即…

Notepad++:多行数据操作

1&#xff09;删除关键字之后&#xff08;或之前&#xff09;的所有字符 删除s之后&#xff08;包含s&#xff09;的所有内容&#xff1b;快捷键&#xff1a;s.*$ 替换成功 删除s之前&#xff08;包含s&#xff09;的所有内容&#xff1b;快捷键&#xff1a;^.*s 2&#xff09…

互式流程图|BPMN JointJS+ JavaScript 3.7.3 Crack

JointJS 是 JavaScript 图表库为卓越的 UI 提供支持 使用经过验证的库快速、自信地构建高级视觉和无代码/低代码应用程序。 赋能全球行业领导者 使用 JointJS 构建的图表 一个库&#xff0c;‍无限 UI 选项 直接在您的应用程序中享受交互式流程图、BPMN 和其他图表工作室。利用…

乐理基础-情绪与速度、具体的速度、BPM

首先音乐中的一拍并不是一个具体的时间&#xff08;详情看这两个 认识音符、什么是一拍&#xff09;&#xff0c;一拍并不是1图6&#xff1a;秒、2秒、3秒这样一个具体的时间&#xff0c;只能说在同样一份乐谱和同样一个速度下&#xff0c;全音符、二分音符、四分音符等等会依次…

aws配置以及下载 spaceNet6 数据集

一&#xff1a;注册亚马逊账号 注册的时候&#xff0c;唯一需要注意的是信用卡绑定&#xff0c;这个可以去淘宝买&#xff0c;搜索aws匿名卡。 注册完记得点击登录&#xff0c;记录一下自己的账户ID哦&#xff01; 二&#xff1a;登录自己的aws账号 2.1 首先创建一个用户 首…

QTNet:Query-based Temporal Fusion with Explicit Motion for 3D Object Detection

参考代码&#xff1a;QTNet 动机和出发点 自动驾驶中时序信息对感知性能具有较大影响&#xff0c;如在感知稳定性维度上。对于常见的时序融合多是在feature的维度上做&#xff0c;这个维度的融合主要分为如下两个方案&#xff1a; 1&#xff09;BEV-based方案&#xff1a;将之…

鸿蒙 - arkTs:渲染(循环 - ForEach,判断 - if)

ForEach循环渲染&#xff1a; 参数&#xff1a; 要循环遍历的数组&#xff0c;Array类型遍历的回调方法&#xff0c;Function类型为每一项生成唯一标识符的方法&#xff0c;有默认生成方法&#xff0c;非必传 使用示例&#xff1a; interface Item {name: String,price: N…

Linux之yum管理器

目录 yum管理器 yum相关指令 yum list yum list | grep yum install yum remove 拓展 1.yum install -y man-pages 2.切换yum源 3.yum install -y epel-release 4. yum install -y lrzsz rz指令 sz指令 在window系统上&#xff0c;我们会在电脑自带的应用商…

【python基础】-- yarn add 添加依赖的各种类型

目录 1、安装 yarn 1.1 使用npm安装 1.2 查看版本 1.3 yarn 淘宝源配置 2、安装命令说明 2.1 yarn add&#xff08;会更新package.json和yarn.lock&#xff09; 2.2 yarn install 2.3 一些操作 2.3.1 发布包 2.3.2 移除一个包 2.3.3 更新一个依赖 2.3.4 运行脚本 …

华清远见嵌入式学习——ARM——作业1

要求&#xff1a; 代码&#xff1a; mov r0,#0 用于加mov r1,#1 初始值mov r2,#101 终止值loop: cmp r1,r2addne r0,r0,r1addne r1,r1,#1bne loop 效果&#xff1a;

【VRTK】【VR开发】【Unity】16-磁吸区域

课程配套学习项目源码资源下载 https://download.csdn.net/download/weixin_41697242/88485426?spm=1001.2014.3001.5503 【背景】 记得《半条命艾利克斯》中神奇的磁吸手套吗?这就是用本篇介绍的Snap Zone实现的!Snap Zone可以达到将两个物体以特定方式对齐的效果,比如让…

YOLOv8改进 | 主干篇 | 利用MobileNetV1替换Backbone(轻量化网络结构)

一、本文介绍 本文给大家带来的改进机制是MobileNetV1&#xff0c;其是专为移动和嵌入式视觉应用设计的轻量化网络结构。这些模型基于简化的架构&#xff0c;并利用深度可分离卷积构建轻量级深度神经网络&#xff0c;其引入了两个简单的全局超参数&#xff0c;用于在延迟和准确…

自学精灵--专业的编程学习网站

这是我看过的最靠谱的编程学习网站&#xff0c;名字是&#xff1a;自学精灵&#xff0c;网站是&#xff1a;learn.skyofit.com。&#xff08;某度搜"自学精灵"也可找到此站&#xff0c;搜不到可以用必应搜&#xff09;。 自学精灵是全网最强的学习平台&#xff0c;我…

Flink Table API 与 SQL 编程整理

Flink API总共分为4层这里主要整理Table API的使用 Table API是流处理和批处理通用的关系型API&#xff0c;Table API可以基于流输入或者批输入来运行而不需要进行任何修改。Table API是SQL语言的超集并专门为Apache Flink设计的&#xff0c;Table API是Scala和Java语言集成式…

Ubuntu录屏方法带声音

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、安装二、使用步骤总结 前言 有时候需要在Ubuntu录制下屏幕&#xff0c;在Windows下面录制比较简单使用Nvidia自带的效果就蛮好&#xff0c;如果不是N卡就使…

直排轮滑教程3

轮滑三大要求&#xff1a; 三点直线、腿要直、轮要正。 直线蹬地技术 1&#xff0c;直排轮滑&#xff0c;直线蹬地技术的陆地模仿练习。 2&#xff0c;在滑行做动作之前&#xff0c;先陆地上模仿。支撑腿、运动腿怎么蹬地&#xff0c;髋怎么移动。来讲一下要领。 3&#xf…