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`,进入付费问答群。

相关推荐
无敌最俊朗@4 分钟前
c#————委托Action使用例子
java·前端·c#
7643319 分钟前
JavaScript ES6 继承 class
前端·javascript
袁代码25 分钟前
SwiftUI开发教程系列 - 第十二章:本地化与多语言支持
开发语言·前端·ios·swiftui·swift·ios开发
软件聚导航1 小时前
在uniapp中使用canvas封装组件遇到的坑,数据被后面设备覆盖,导致数据和前面的设备一样
java·前端·uni-app
好开心331 小时前
javaScript交互补充2(动画函数封装)
开发语言·前端·javascript·html·ecmascript
将登太行雪满山_1 小时前
自存 关于RestController请求传参数 前端和后端相关
java·前端·spring boot
kali-Myon1 小时前
ctfshow-web入门-SSTI(web369-web372)下
前端·python·学习·web安全·flask·web·ssti
鸽鸽程序猿1 小时前
【前端】HTML
前端·html
泰山小张只吃荷园1 小时前
通过SpringTask模拟打印机定时向数据库传入模拟数据
java·开发语言·后端·spring·mybatis
程楠楠&M1 小时前
mongoDB的安装及使用
前端·数据库·mongodb·node