欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

v3-admin-vite 整合pont的詳細(xì)過程

 更新時間:2024年03月19日 10:50:23   作者:applebomb  
這篇文章主要介紹了v3-admin-vite 整合pont的詳細(xì)過程,目前后端的Admin模板使用的是v3-admin-vite,需要整合pont接口,方便前后端統(tǒng)一一體化開發(fā),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下

需求

目前后端的Admin模板使用的是v3-admin-vite,需要整合pont接口,方便前后端統(tǒng)一一體化開發(fā)

安裝PONT

按照官方的文檔,將pont engine安裝好,然后在項目根目錄執(zhí)行pont start。注意生成代碼路徑要修改一下,因為v3-admin-vite是放到src下

數(shù)據(jù)源是swagger的API地址,swagger配置方式略。下一步在VSCode里安裝pont工具,這樣就可以生成js api代碼了,但是在生成前,建議修改一下配置。

格式統(tǒng)一化

如果直接生成,生成的代碼會由于 prettier 的關(guān)系出現(xiàn)不少錯誤提示。解決的辦法是參考根目錄下v3-admin-vite的prettier.config.js,修改一下根目錄下的pont-config.json,讓它們保持一致

然后VSCode下切換到pont面板以此點擊拉取遠(yuǎn)程數(shù)據(jù)源,生成接口代碼:

然后代碼就生成好了,生成的代碼是這么個對應(yīng)關(guān)系:

每個導(dǎo)出的方法一個ts文件

整合請求

前面弄完了,v3和pont的請求還是各干各的。需要將它們整合起來。

v3的請求在src/util/services.ts

pont的請求在src/services/pontCore.ts

修改pontCore.ts,以適配v3-admin的請求。實際上,除了個別狀態(tài)碼有差別,大部分也是兼容ccframe的,但是有幾個問題

1)請求長度問題,pont默認(rèn)里post請求是將所有的參數(shù)生成到URL請求的,見這部分代碼

這個干了兩個事情:

1)把路徑占位符例如{id}替換為param里的id,并從param里刪除

2)把param剩余的參數(shù)掛到URL后面

所以如果POST發(fā)送參數(shù)過長,這樣會導(dǎo)致URL請求超過承載長度,不適合發(fā)送大量的數(shù)據(jù),因此需要擴充表單發(fā)送的方式,當(dāng)post請求時以表單編碼發(fā)送。

本著最小修改原則,我們只需要修改pontTemplate.ts,不使用PontCore,采用v3 admin的請求:

import { Interface, BaseClass, Property, CodeGenerator, Surrounding } from 'pont-engine'
export default class MyGenerator extends CodeGenerator {
  getInterfaceContentInDeclaration(inter: Interface) {
    const requestParams = inter.getRequestParams()
    const paramsCode = inter.getParamsCode('Params')
    return `
      export ${paramsCode}
      export type Response = ${inter.responseType}
      export const init: Response;
      export function request(${requestParams}): Promise<Response>;
    `
  }
  getBaseClassInDeclaration(base: BaseClass) {
    const originProps = base.properties
    base.properties = base.properties.map((prop) => {
      return new Property({
        ...prop,
        required: false
      })
    })
    const result = super.getBaseClassInDeclaration(base)
    base.properties = originProps
    return result
  }
  getInterfaceContent(inter: Interface) {
    //const method = inter.method.toUpperCase()
    const axiosParamKey = 'GET' == inter.method.toUpperCase() ? 'params' : 'data' // 如果是GET,放param,如果是POST/PUT,放data
    const requestParams = inter.getRequestParams(this.surrounding)
    const paramsCode = inter.getParamsCode('Params', this.surrounding)
    return `
    /**
     * @desc ${inter.description}
     */
    import * as defs from '../../baseClass';
    import { request as service } from '../../../utils/service';
    export ${paramsCode}
    export const init = ${inter.response.getInitialValue()};
    export function request(${requestParams}, jsonPost: boolean = false) {
      return service({url:"${inter.path}", ...${inter.getRequestContent()}, ${axiosParamKey}: params, jsonPost})
    }
   `
  }
}

嘗試一下:

import './../../services/'
API.commonAdmin.doLogin
  .request({ loginId: 'admin', userPsw: 'ssss', sid: '8888', validateCode: 'nere' })
  .then((res) => {
    console.log('*****', res)
  })

能夠看到請求輸出。但是報找不到參數(shù),發(fā)現(xiàn)請求被編碼成application/json格式了,當(dāng)然接收不到了(如果要接收必須用@RequestBody)。由于我們請求大部分都是form格式的key-value數(shù)據(jù),很少有結(jié)構(gòu)化的數(shù)據(jù),因此,需要默認(rèn)為application/x-www-form-urlencoded編碼,但是預(yù)留一個參數(shù)可以傳遞json數(shù)據(jù)支持結(jié)構(gòu)化數(shù)據(jù),因此在模板里添加了一個jsonPost變量,當(dāng)開啟時,采用application/json編碼,修改src/utils/service.ts的請求部分如下:

/** 擴展了jsonPost參數(shù) */
export interface AxiosRequestConfigEx extends AxiosRequestConfig {
  jsonPost?: boolean
}
/** 創(chuàng)建請求方法 */
function createRequest(service: AxiosInstance) {
  return function <T>(config: AxiosRequestConfigEx): Promise<T> {
    const token = getToken()
    const defaultConfig = {
      headers: {
        // 攜帶 Token
        Authorization: token ? `Bearer ${token}` : undefined,
        'Content-Type': 'application/x-www-form-urlencoded' //默認(rèn)form編碼,少量超大對象使用jsonPost
      },
      timeout: 10000, //默認(rèn)10秒請求超時
      baseURL: import.meta.env.VITE_BASE_API,
      data: {}
    }
    // 將默認(rèn)配置 defaultConfig 和傳入的自定義配置 config 進行合并成為 mergeConfig
    const mergeConfig = merge(defaultConfig, config)
    if (config.jsonPost == true) {
      mergeConfig.headers['content-type'] = 'application/json'
    }
    return service(mergeConfig)
  }
}

這樣配合模板里傳入的jsonPost變量,當(dāng)jsonPost傳true時,可以使用json body進行傳遞

整合返回

整合請求后基本上本文可以結(jié)束了,但是項目里由于對返回進行了一些新的約定。需要進行調(diào)整,此部分直接修改v3-admin-vite的service.ts請求返回部分即可,不在本文贅述

到此這篇關(guān)于v3-admin-vite 整合pont的文章就介紹到這了,更多相關(guān)v3-admin-vite 整合pont內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaScript高級程序設(shè)計 讀書筆記之八 Function類及閉包

    JavaScript高級程序設(shè)計 讀書筆記之八 Function類及閉包

    Function類及閉包,學(xué)習(xí)js的朋友可以參考下
    2012-02-02
  • 微信小程序?qū)崿F(xiàn)上傳圖片的功能

    微信小程序?qū)崿F(xiàn)上傳圖片的功能

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)上傳圖片的功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • JS原形與原型鏈深入詳解

    JS原形與原型鏈深入詳解

    這篇文章主要介紹了JS原形與原型鏈,結(jié)合實例形式深入分析了JS原型鏈、繼承、組合繼承等相關(guān)原理、操作技巧及注意事項,需要的朋友可以參考下
    2020-05-05
  • 微信小程序激勵式視頻廣告組件使用詳解

    微信小程序激勵式視頻廣告組件使用詳解

    這篇文章主要介紹了微信小程序激勵式視頻廣告組件使用,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • 微信小程序上傳圖片到php服務(wù)器的方法

    微信小程序上傳圖片到php服務(wù)器的方法

    這篇文章主要為大家詳細(xì)介紹了微信小程序上傳圖片到php服務(wù)器的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • uni-app中實現(xiàn)元素拖動效果

    uni-app中實現(xiàn)元素拖動效果

    這篇文章主要介紹了uni-app中實現(xiàn)元素拖動效果,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-01-01
  • 一文詳解如何在uniapp中設(shè)置隱私政策彈窗

    一文詳解如何在uniapp中設(shè)置隱私政策彈窗

    在將uniapp打包成APP端時,上架到應(yīng)用市場的時候需要配置隱私彈窗,下面這篇文章主要給大家介紹了關(guān)于如何在uniapp中設(shè)置隱私政策彈窗的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • NodeJS與Mysql的交互示例代碼

    NodeJS與Mysql的交互示例代碼

    實現(xiàn)NodeJS與Mysql的交互首先把Mysql Module裝到NodeJS中,具體實現(xiàn)及結(jié)果截圖如下,有此需求的朋友可以參考下,希望對大家有所幫助
    2013-08-08
  • 基于wordpress的ajax寫法詳解

    基于wordpress的ajax寫法詳解

    下面小編就為大家分享一篇基于wordpress的ajax寫法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • Js查找字符串中出現(xiàn)次數(shù)最多的字符及個數(shù)實例解析

    Js查找字符串中出現(xiàn)次數(shù)最多的字符及個數(shù)實例解析

    這篇文章主要介紹了Js查找字符串中出現(xiàn)次數(shù)最多的字符及個數(shù) ,本文分為傳統(tǒng)寫法和正則寫法兩種方法給大家介紹了js查找字符串出現(xiàn)次數(shù)最多的字符及個數(shù),非常不錯,感興趣的朋友參考下吧
    2016-09-09

最新評論