在前端应用的开发中,Service Layer 设计方案被广泛应用于后端服务的设计中。Service Layer 是前端向后端发起请求的中间层,将请求参数封装并调用后端服务,同时还负责处理服务返回的结果,将其转换成前端所需要的数据格式,为前端应用提供数据支持。
本文将介绍如何在 Express.js 中使用 Service Layer 设计方案,包括 Service Layer 的设计思路、如何封装服务请求,以及如何处理服务返回的结果。
Service Layer 的设计思路
Service Layer 的设计思路主要分为以下两个方面:
结构化
使用结构化的方式来组织 Service Layer,按照不同的业务模块将其拆分成不同的模块,在模块中尽可能地进行封装,把模块的工作范围限制在模块的内部,遵循单一职责原则。这样可以更好地维护代码,降低代码的耦合度。
标准化
将 Service Layer 向外提供的接口进行标准化,在接口设计中尽可能地贴近业务需求,同时保证接口的可复用性,并且使用流式编程范式,通过返回 this 允许链式调用,这样可以提高代码的执行效率,同时也便于代码的维护。
Service 请求的封装
Service 请求的封装是 Service Layer 中比较重要的部分,它不仅影响着 Service 请求的效率和稳定性,同时也影响着前端应用的性能和可维护性。在 Express.js 中,我们通常使用 axios 库来进行 Service 请求的封装,示例代码如下:
// javascriptcn.com 代码示例 const axios = require('axios'); class Service { constructor() { this.http = axios.create({ baseURL: 'http://localhost:3000', timeout: 10000, headers: { 'Content-Type': 'application/json' } }); } async get(url, data) { const response = await this.http.get(url, { params: data }); return response.data; } async post(url, data) { const response = await this.http.post(url, data); return response.data; } async put(url, data) { const response = await this.http.put(url, data); return response.data; } async delete(url, data) { const response = await this.http.delete(url, { params: data }); return response.data; } } module.exports = Service;
在 Service 的构造函数中,我们使用 axios.create() 方法创建了一个 axios 实例,可以用来封装请求的基础参数,例如 baseURL、timeout 和 headers 等。在 Service 中我们还定义了 get()、post()、put() 和 delete() 四个方法,用来实现不同的 HTTP 请求。
Service 请求的处理
在 Service 的请求处理中,我们通常需要处理 Service 返回的结果。如果请求失败,我们需要给出提示信息,如果请求成功,则根据业务需求对返回的数据进行加工处理,最终生成前端所需要的数据格式。
在处理 Service 请求的过程中,我们通常需要引入一些辅助工具,例如 lodash 库用于对数据进行加工处理,moment 库用于日期字符串的格式化等。
示例代码如下:
// javascriptcn.com 代码示例 const _ = require('lodash'); const moment = require('moment'); async function getList(params) { const results = await Service.get('/api/list', params); if (_.isEmpty(results)) { throw new Error(`No results found for the given parameters ${JSON.stringify(params)}`); } return _.map(results, (result) => ({ id: result.id, name: result.name, createdAt: moment(result.createdAt).format('YYYY-MM-DD'), updatedAt: moment(result.updatedAt).format('YYYY-MM-DD') })); }
在 getList() 方法中,我们通过调用 Service.get() 方法来获取列表数据,如果 Service.get() 返回的数据为空,则通过 throw new Error() 方法来抛出异常信息;如果 Service.get() 返回的数据不为空,则通过 lodash 库的 map() 方法对数据进行加工处理,并将其转换成前端所需的数据格式。
总结
Service Layer 是前端应用开发中不可或缺的中间层。在 Express.js 中使用 Service Layer 可以帮助我们更好地组织代码,降低代码的耦合度,提高代码的可维护性。在 Service 请求的封装和处理中,我们需要选用合适的工具和方法,保证代码的稳定性和效率,同时满足业务需求和前端应用的展示需求。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6537e6cf7d4982a6eb07ac6f