Node.js全栈:完善接口服务器

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

相关推荐
G_G#3 分钟前
纯前端js插件实现同一浏览器控制只允许打开一个标签,处理session变更问题
前端·javascript·浏览器标签页通信·只允许一个标签页
@大迁世界19 分钟前
TypeScript 的本质并非类型,而是信任
开发语言·前端·javascript·typescript·ecmascript
GIS之路28 分钟前
GDAL 实现矢量裁剪
前端·python·信息可视化
勇哥java实战分享29 分钟前
短信平台 Pro 版本 ,比开源版本更强大
后端
是一个Bug31 分钟前
后端开发者视角的前端开发面试题清单(50道)
前端
Amumu1213833 分钟前
React面向组件编程
开发语言·前端·javascript
学历真的很重要34 分钟前
LangChain V1.0 Context Engineering(上下文工程)详细指南
人工智能·后端·学习·语言模型·面试·职场和发展·langchain
计算机毕设VX:Fegn089537 分钟前
计算机毕业设计|基于springboot + vue二手家电管理系统(源码+数据库+文档)
vue.js·spring boot·后端·课程设计
上进小菜猪1 小时前
基于 YOLOv8 的智能杂草检测识别实战 [目标检测完整源码]
后端
持续升级打怪中1 小时前
Vue3 中虚拟滚动与分页加载的实现原理与实践
前端·性能优化