前言

本文章秉着自动化工程项目的思想搭建的,基础架子完全按照wepy官网搭建,在基础上增加配置达到自动化项目。新增动flxio拦截器自动处理接口,新增根据环境变量来改变运行时的参数。

Fly.js

小程序拦截器个人不是很满意,在网上就寻找到了fly.js 感谢作者大大@wendux

简介

一个支持所有JavaScript运行环境的基于Promise的、支持请求转发、强大的http请求库。可以让您在多个端上尽可能大限度的实现代码复用,它有如下特点:

  • 提供统一的 Promise API。
  • 浏览器环境下,轻量且非常轻量 。
  • 支持多种JavaScript 运行环境
  • 支持请求/响应拦截器。
  • 自动转换 JSON 数据。
  • 支持切换底层 Http Engine,可轻松适配各种运行环境。
  • 浏览器端支持全局Ajax拦截 。
  • H5页面内嵌到原生 APP 中时,支持将 http 请求转发到 Native。支持直接请求图片

安装/配置使用

npm install flyio --save

新增staticEnv.js 配置接口种类

const base = "/api-login"
const common = "/api-common"
const elevator = "/api-elevator"
const workorder = "/api-workorder"
const device = "/api-device"
const authcontract = "/api-auth-contract"
const contract = "/api-contract"
const events = "/api-events"
export {
base,
common,
elevator,
workorder,
device,
authcontract,
contract,
events
}

新增错误代码判断errorCode.js

import Tips from './Tips';

export function errorCodeHandler(errorcode, message) {
switch (errorcode) {
case 13001:
Tips.alert('注册时未填写公司信息!');
break;
case 31001:
Tips.alert('公司待审核!');
break;
case 13004:
Tips.alert('公司待审核!');
break;
case 13005:
Tips.alert('公司待审核!');
break;
//登录超时errorCodeHandler
case 12009:
Tips.alert(message);
wx.navigateTo({
url: '/pages/login/index'
});
break;
case 3008:
Tips.alert(message);
wx.navigateTo({
url: '/pages/login/index'
});
break;
default:
if (message) {
Tips.alert(message);
}
}
}

新增http.js


import Fly from 'flyio/dist/npm/wx' //npm引入方式
import { base, common, elevator, workorder, device, authcontract, contract, events } from '../api/staticEnv'
import Tips from './Tips';
import { errorCodeHandler } from './errorCode'
//创建fly实例
const fly = new Fly() //配置请求baseURL
fly.config.baseURL = BASE_API //添加请求拦截器
fly.interceptors.request.use((config) => {
Tips.loading();
// 判断是否存在token,如果存在的话,则每个http header都加上token
const token = wx.getStorageSync('token')
if (token) {
config.headers.tokenStr = token;
}
// 统一添加接口种类 "http://api.p1.ettda.com/api-login"
switch (config.proxy) {
case 'base':
config.url = base + config.url;
break;
case 'common':
config.url = common + config.url;
break;
case 'elevator':
config.url = elevator + config.url;
break;
case 'workorder':
config.url = workorder + config.url;
break;
case 'device':
config.url = device + config.url;
break;
case 'authcontract':
config.url = authcontract + config.url;
break;
case 'contract':
config.url = contract + config.url;
break;
case 'events':
config.url = events + config.url;
break;
default:
break;
}
return config;
}) //添加响应拦截器,响应拦截器会在then/catch处理之前执行
fly.interceptors.response.use(
response => {
Tips.loaded();
//返回错误代码处理前端页面提示
if (response.data.code != 0) {
errorCodeHandler(response.data.code, response.data.message);
return Promise.reject(response.data)
}
return response.data;
},
error => {
if (error.response) {
Tips.error('出错啦,请稍后再试!')
}
return Promise.reject(error); // 返回接口返回的错误信息
}); export default fly;

使用

import fly from '@/utils/http'
import qs from 'qs' const config = {
proxy: 'base' // 接口种类
}; export async function requestLogin(params) {
return await fly.post('/login', qs.stringify(params), config)
}
<!--wpy文件调用--> requestLogin({
username: 'username',
password: 'password'
}).then(res => {
console.log(res);
});

完整的fly拦截器我们就完成l,主要公司业务接口毕竟多,我的想法就是模块化每个api种类来维护,使用拦截器就很好的组装接口,节省大家开发时间和减少重复工作。

wepy-plugin-replace

为 plugins 添加 replace 对象,支持单个或者多个规则,多个规则可以以 Array 或者 Object 实现,filter 的对象为生成后文件的路径, 例如'dist/app.js',每个规则也同时支持多个替换条目,同样是以 Array 或者 Object 实现。

简介

多环境对于每个公司来说都是需要的,测试环境,正式环境等等。以前我们都是每次发布时候都手动修改api接口地址,可这样的重复无聊的工作我们就应该交给工具来实现。我们要有一个工程化的思想去构建整个项目,减少小伙伴在开发中遇到的无趣工作和节约他们的时间。所以我寻找到了上面的wepy-plugin-replace插件。

配置

wepy.config.js中

plugins: {
replace: {
filter: /\.js$/,
config: {
find: /BASE_API/,
replace: function (matchs, word) {
return process.env.NODE_ENV === 'production' ? '"https://api.a.com/"' : '"https://api.a.com/dev/"'
}
}
}
} //if判断中也需要新增
if (prod) {
module.exports.plugins = {
replace: {
filter: /\.js$/,
config: {
find: /BASE_API/,
replace: function (matchs, word) {
return process.env.NODE_ENV === 'production' ? '"https://api.a.com/"' : '"https://api.a.com/dev/"'
}
}
}
}
}

package.json中

"dev": "cross-env NODE_ENV=development env_config=dev wepy build --watch",
"build": "cross-env NODE_ENV=production env_config=test wepy build --no-cache",

使用

npm run dev或者npm run build。插件就会自动匹配BASE_API然后替换成当前env_config匹配的api接口地址。在http.js中就简单的提现了,同时你也可以使用到其他方式上,

总结

前端工程化是前端架构中重要的一环,主要就是为了解决如何进行高效的多人协作?如何保证项目的可维护性?如何提高项目的开发质量。所以这个文章同样适用于其他地方,希望文章能帮到大家。本人搭建的wepy整体项目已托管到github上,对你有帮助给star

微信小程序之wepy自动化架构搭建(fly+wepy-plugin-replace)的更多相关文章

  1. 微信小程序全面实战,架构设计 && 躲坑攻略(小程序入门捷径教程)

    最近集中开发了两款微信小程序,分别是好奇心日历(每天一条辞典+一个小投票)和好奇心日报(轻量版),直接上图: Paste_Image.png 本文将结合具体的实战经验,主要介绍微信小程序的基础知识.开 ...

  2. 【微信小程序】---线上环境搭建

    一.前言 通常我们在本地电脑上开发微信小程序,调用和访问小程序会有很多问题.特别是在配有自己后端的情况下,我们通过真机访问我们的小程序会出现不可访问的问题 二.线上环境搭建 在这里我们主要以腾讯云给大 ...

  3. 微信小程序入门 第一个页面搭建

    首先搭建首页 微信小程序与web程序非常相似  有非常多的组件  多个组件形成一个页面 每个组件有自己一些特殊的属性来控制显示效果 通过js注册事件控制响应 首先使用swiper实现一个banner轮 ...

  4. 微信小程序开发之https服务器搭建三步曲

    本篇文章主要讲述3个方面的内容,如下: 1.SSL证书的获取 2.服务器 Nginx SSL 证书的配置. 3.如何兼容80端口和443端口以及为什么要同时兼容这两个端口. 1.SSL证书的获取 ht ...

  5. 多个微信小程序一个服务端架构

    由于某些特定的业务场景,当多个小程序需要一个服务端后台提供数据时,大家可能想到是HTTP路由.是的,实际上我们使用微服务的GateWay网关也是一样的,如下图微服务架构: 网关GateWay的作用在于 ...

  6. 微信小程序接入,https服务器搭建和调试

    在进行小程序开发时候,调试时候,希望在本地搭建一个https环境. 准备条件: 1.公网主机(阿里云或者腾讯云主机) 2外网访问工具natapp 步骤: 1.在主机上安装nginx(nginx转发到n ...

  7. 微信小程序阿里云服务器https搭建

    已更新 2018-11-20 1.什么是https?HTTPS(全称:安全套接字层上的超文本传输​​协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即HTTP下加入SSL层,HTTPS ...

  8. 微信小程序实现图片裁剪上传(wepy)

    参考https://github.com/we-plugin/we-cropper,在wepy中实现,参考的具体例子是we-cropper/example/cutInside/ 项目上传图片时2:3的 ...

  9. 像VUE一样写微信小程序-深入研究wepy框架

    像VUE一样写微信小程序-深入研究wepy框架 微信小程序自发布到如今已经有半年多的时间了,凭借微信平台的强大影响力,越来越多企业加入小程序开发. 小程序于M页比相比,有以下优势: 1.小程序拥有更多 ...

随机推荐

  1. Myeclipse下更改所有jsp、html文件的编码

    windows-->>preferences-->>gengral-->>

  2. [io benchmark]常用磁盘基准/压力测试工具

    Unix Disk I/O Benchmarks fio - NEW! fio is an I/O tool meant to be used both for benchmark and stres ...

  3. 【整理】explain、type、extra用法和结果的含义

    EXPLAIN列详情 详细解读:https://www.cnblogs.com/yycc/p/7338894.html explain显示了mysql如何使用索引来处理select语句以及连接表.可以 ...

  4. git安装和简单配置

    http://pan.baidu.com/share/link?shareid=4291215660&uk=219947478 直接贴网盘的地址了

  5. 绝妙的SQL行列转换语句

      说明:普通行列转换(version 1.0)仅针对sql server 2000提供静态和动态写法,version 2.0增加sql server 2005的有关写法. 问题:假设有张学生成绩表( ...

  6. laravel 模糊查询

    模糊查询: Model::where('field_name','like','%'.$keywords.'%')->get() 转载:http://wenda.golaravel.com/qu ...

  7. 使sqoop能够启用压缩的一些配置

    在使用sqoop 将数据库表中数据导入至hdfs时 配置启用压缩 hadoop 的命令    检查本地库支持哪些  bin/hadoop checknative 需要配置native    要编译版本 ...

  8. NYOJ 163 Phone List (字符串处理 字典树)

    题目链接 描述 Given a list of phone numbers, determine if it is consistent in the sense that no number is ...

  9. NYOJ 221 Tree (二叉树)

    题目链接 描述 Little Valentine liked playing with binary trees very much. Her favorite game was constructi ...

  10. 1、编写第一个java程序--Hello—World

    1.下载JDK8.0文件 下载网址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.ht ...