Node.js实验指南:完善接口服务器

陈随易

上一章接口服务器,我们实现了一个异常简单的接口服务器。可能很多人会感觉有点不真实的感觉,接口这么简单吗?没错,就这么简单。

我们在真实项目的前后端对接中,调用接口,拿到数据,就是如此而已。只不过,在接口的判断,数据的处理和获取,都加入了更为复杂和完善的逻辑而已。

本章呢,我们就来把接口服务器进一步完善一下,不然写那么多的if判断,也着实麻烦。

问题来了,如何改造呢?首先,接口的业务逻辑肯定不能直接放在我们的index.js文件中,不然这文件写到后面,不得几千上万行啊,不行。所以,我们可以将不同的接口,用不同的文件来表示,请求什么接口,就执行该文件导出的函数就好了。

picture 10

这是我们将获取用户分数接口从index.js文件中分离后的代码。

picture 11

那么分离后,把接口内的函数导出,再执行,最后再返回,效果也是一样的。这样,不同的接口可以用不同的文件来表达,代码管理起来方便了不少。

但是…,不知道有没有人发现,这样还是很麻烦,if判断还是没少啊。所以我们下一步呢,就是要把if判断也“干掉”。

我们来分析一下思路,首要前提是什么呢?“偷懒”,一定要“偷懒”!代码能少写就少写,能不写就不写。所以,我们可以这样设想,当请求到达的时候,我们根据请求的接口名称,自动去获取同名的文件,执行该文件内的函数,获得结果后赋值给result变量,最后再通过res.send返回给浏览器。

要获取文件名,这里就少不了读取文件和目录的内置模块“fs”,要自动匹配接口名称,这里就要用到哈希结构,也就是对象了。说起来比较抽象,直接看下面的写法。

picture 12

我们创建一个新文件routes.js,含义就是接口路由。

前端有页面路由,后端有接口路由。

每个页面路由对应着一个个页面,每个接口路由对应着一个个接口。

如果没有把握一次性把功能搞定,那就每实现一步就打印出来看看,毕竟眼见为实,我们才好知道下一步怎么做。

picture 13

那么从上一步我们得知,files获取到的值是一个数组,数组的话,我们可以使用for...of方法来遍历。那么这里为什么不用forEachmap呢?纯粹是个人喜好,for...ofES6标准带来的新的遍历方法,可以支持continuebreak中断。

请注意截图中(1)处的await,自Node.js v14.8.0开始,就已经支持顶层await了。也就是说,我们不需要写async,就能直接使用await。如果用forEachmap函数,是不能直接使用await的,因为它们需要在函数中处理逻辑,已经不处于“顶层”了。

为了方便查看对比呢,我又写了一个新的接口,获取用户的性别,代码跟获取分数差不多啦,不截图了。我们用一个Object类型的变量apiMaps用来集合我们所有的接口。同时呢,把接口文件的方法,通过import()动态导入,复制给对应的文件名属性。

这样,我们就可以从apiMaps中获取跟接口请求路径同名的函数,执行这个函数,获得对应的接口返回数据了。

picture 14

经过我们改造后的接口处理部分,就变成这样了。需要注意的是,我们的接口函数是一个default默认导出,所以我们在执行函数的时候,也需要通过default来执行函数。

picture 15

可以看到,请求也能拿到数据,跟我们之前的功能完全一样。

这么一来,不管我们写多少接口,都不用写麻烦的if来判断了,“偷懒”成功!

最后一步呢,我们再来处理一下,当请求的接口不存在的情况。

picture 16

很简单,判断apiMaps中,是否有该接口名称即可。

picture 17

当我们请求一个不存在的接口的时候,就能返回“接口不存在”的提示信息了。

在我们这个接口返回结构中,我们约定,code == 0表示正常返回,code != 0则表示其他异常返回。

好了,接口完善后,后面的章节,我们就要开始学习如何操作数据库,如何发送邮件,如何实现登录注册,如何实现文章的增删改查了。

本小册的免费部分,也截止到本章为止。如果你想学习本课程的完整内容,请访问笔者网站:https://chensuiyi.me,或者联系笔者微信chensuiyime,进入付费问答群。

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

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

相关文章

文心一言 VS 讯飞星火 VS chatgpt (291)-- 算法导论21.3 4题

四、假设想要增加一个 PRINT-SET(x) 操作,它是对于给定的结点 x 打印出 x 所在集合的所有成员,顺序可以任意。如何对一棵不相交集合森林的每个结点仅增加一个属性,使得 PRINT-SET(x) 所花费的时间同 x 所在集合元素的个数呈线性关系&#xff…

金顺心贸易有限公司简介

金顺心贸易有限公司成立于2015年,注册地位于风景如画的广西壮族自治区防城港市东兴市。 金顺心贸易如他们的名字一样,有着实实在在的业绩和口碑的。他们专注于国际贸易,主营越南进口食品:果汁饮料、春卷皮、调味品、汤底、米粉、…

定制聚四氟乙烯架子离心管架子消解管样品架

南京瑞尼克定制离心管架子、消解管架子、微波罐架子等,各种实验室所需器皿样品架。 我司聚四氟乙烯架子优势: 1.耐强腐蚀(耐各种强酸强碱和有机溶剂) 2.耐高低温:-200至250℃ 3.工艺精制,尺寸&#xff0…

算法设计与分析--考试真题

分布式算法试题汇总选择题简答题算法题 2013级试题2019级试题2021年秋考卷 根据考试范围找相应题目做。 分布式算法试题汇总 选择题 下述说法错误的是___ A 异步系统中的消息延迟是不确定的 B 分布式算法的消息复杂性是指在所有合法的执行上发送消息总数的最大值 C 在一个异步…

如何实现高精度PCB切割?— 在线式激光切割机解决方案

在线式PCB精密激光切割机是一种专门用于电子行业中印刷电路板(PCB)切割的高精度设备。以下是关于在线式PCB精密激光切割机的详细信息和特点: 1. 工作原理: 在线式PCB精密激光切割机主要通过激光束的高能量密度对PCB板进行瞬时加热…

新手必备!短视频剪辑常用的18个技巧——剪映篇

导入素材:这里我们可以选择自己拍摄好的素材(图片、视频或录制好的音频),按照顺序导入剪辑区剪辑。这一步是剪辑的基础,确定剪辑的大体思路与成片框架!别忽略了,剪映官方素材库提供的素材&#…

私域流量的深度解析与电商应用

一、私域流量的核心价值 在当今数字化时代,流量成为了企业发展的重要资源。与公域流量相比,私域流量以其独有的私有性和可复用性,为企业提供了与用户建立深度联系的机会。私域流量不仅有助于企业精准触达目标用户,还能通过数据分…

python办公自动化之excel

用到的库:openpyxl 实现效果:读取单元格的值,写入单元格 代码: import openpyxl # 打开现有工作簿 workbookopenpyxl.load_workbook(现有工作簿.xlsx) # 选择一个工作表 sheetworkbook[交易表] # 读取单元格的值 cell_valueshe…

甄选版“论软件系统架构评估”,软考高级,系统架构设计师

论文真题 对于软件系统,尤其是大规模的复杂软件系统来说,软件的系统架构对于确保最终系统的质量具有十分重要的意义,不恰当的系统架构将给项目开发带来高昂的代价和难以避免的灾难。对一个系统架构进行评估,是为了:分析现有架构存在的潜在风险,检验设计中提出的质量需求,…

一名HR,在招聘嵌入式开发岗位,为什么感觉一年比一年难?

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!! 1.嵌入式学用不一致, 高…

Dubbo快速入门

1. Dubbo概述 官网地址:https://cn.dubbo.apache.org/zh-cn/ Apache Dubbo 是一款高性能的轻量级的Java RPC框架,可以和Spring框架无缝集成。 本地调用:本机调用,指同个JVM内部的方法调用,例如三层架构之间的方法调用…

白话EAGLE2:解锁大模型的“打草稿”技术

实时了解业内动态,论文是最好的桥梁,专栏精选论文重点解读热点论文,围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技(Mamba,xLSTM,KAN)…

通义灵码上线 Visual Studio 插件市场啦!

通义灵码,是阿里云出品的一款基于通义大模型的智能编码辅助工具,提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码优化、注释生成、代码解释、研发智能问答、异常报错排查等能力,提供代码智能生成、研发智能问答能力。 通义灵…

flutter开发实战-ListWheelScrollView与自定义TimePicker时间选择器

flutter开发实战-ListWheelScrollView与自定义TimePicker 最近在使用时间选择器的时候,需要自定义一个TimePicker效果,当然这里就使用了ListWheelScrollView。ListWheelScrollView与ListView类似,但ListWheelScrollView渲染效果类似滚筒效果…

【vue3】【vant】 移动端中国传统文化和民间传说案例

更多项目点击👆👆👆完整项目成品专栏 【vue3】【vant】 移动端中国传统文化和民间传说案例 获取源码方式项目说明:其中功能包括项目包含:项目运行环境运行截图和视频 获取源码方式 加Q群:632562109项目说…

Vip-智能预估+大数据标签+人群全选=用户分群!

Mobpush用户分群功能升级,创建推送入口vip用户可进入自有选择标签创建“用户分群”,相比于免费标签,“用户标签”维度更丰富。在应用基础属性上,增加“品牌”、“网络状态”、“运营商”,众所周知,不同厂商…

MJ可以SD就不行么?Stable Diffusion 轻松复刻12生肖水果拼盘,我被AI水果拼盘惊艳到了!

有人用MJ可以轻松生成AI水果拼盘,今天老徐就带大家试试用Stable Diffusion**如何轻松复刻实现。 提示词模版: fruit shapes for chinese new year a wonderful example of edible art, in the style of hyperrealistic wildlife portraits, 1 piece ma…

为什么ISO 45001职业健康安全管理体系是企业发展的基石

ISO 45001源自OHSAS 18001职业健康和安全管理体系,是全球第一个国际职业健康和安全管理标准。ISO(国际标准化组织)于2018年发布了这一标准,旨在帮助各类组织为员工提供一个更安全、更健康的工作环境。与OHSAS 18001相比&#xff0…

2024年跨境电商关键数据统计:市场规模将达到1.976万亿美元

预计2024年跨境电商消费市场规模将达到1.976万亿美元,占全球网上销售总额的31.2%。这一数据无疑展示了跨境电商市场的巨大潜力和迅猛增长趋势。 全球跨境电商的现状与未来 现状 2023年,全球跨境电商市场规模预计达到1.56万亿美元,占全球电子…

【网络安全学习】漏洞利用:BurpSuite的使用-02-常用的标签

下面介绍一下BurpSuite各个标签的用法👇 1️⃣ Dashboard标签 Dashboard,顾名思义就是BurpSuite的仪表盘,可以通过Dashboard进行漏洞扫描,不过该功能需要升级到pro版本,也就是得交钱😭。 2️⃣ Target标签…