91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在前端中動態生成API接口

發布時間:2023-02-03 11:07:41 來源:億速云 閱讀:198 作者:iii 欄目:web開發

這篇文章主要介紹“怎么在前端中動態生成API接口”,在日常操作中,相信很多人在怎么在前端中動態生成API接口問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么在前端中動態生成API接口”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

一  構建自定義命令

1.1 構建項目

創建APISDK文件夾,進入該文件夾后,運行命令npm init -y初始化package.json文件

在package.json文件中增加如下代碼,告訴package.json我的bin叫api-test執行的文件是apiSdk.js

//package.json文件
"bin":{
   "api-test": "apiSdk.js"
 }

怎么在前端中動態生成API接口

1.2 Commander.js

安裝Commander.js node.js命令行界面的完整解決方案,受 Ruby Commander啟發。

具體api可直接前往學習

前端開發node cli 必備技能。

//install 安裝命令
npm install commander

在APISDK文件夾下創建apiSdk.js文件,并寫入以下代碼

#!/usr/bin/env node
"use strict";

var commander_1 = require("commander");
commander_1.program.name('api-test');
commander_1.program
   .command('init') // 創建命令
   .option('--json2js', '配置文件 json 轉 js') // 該命令相關的選項配置
   .description('初始化配置文件') // 命令的描述
   .action(function (d, otherD,cmd) { //處理子級命令
       console.log('我是init')
});
commander_1.program
   .command('update') // 創建命令
   .option('--json2js', '配置文件 json 轉 js') // 該命令相關的選項配置
   .description('初始化配置文件') // 命令的描述
   .action(function (d, otherD,cmd) { //處理子級命令
       console.log('我是update')
});
commander_1.program.parse(process.argv);

#!/usr/bin/env node 這段話的意思是讓使用 node 進行腳本的解釋程序,那下面的就可以使用 node 的語法了

  1. commander 提供的command函數可創建子級命令。

  2. commander 提供的 options 選項可以快捷定義命令行參數,并生成對應的參數配置文檔 在--help 命令中展示。 options 可以接收多個參數。

  3. commander 提供的description命令的描述。

  4. commander 提供的command處理子級命令。

在APISDK文件夾終端下輸入npm link命令(在本地開發npm包的時候,我們可以使用npm link命令,將npm包模塊鏈接到運行項目中去,方便地對模塊進行調試和測試),然后我們在APISDK文件夾之外重新創建一個新的文件夾,運行api-test initapi-test update命令

怎么在前端中動態生成API接口我們輸入對應的命令會執行action中的方法。

二 動態生成對應的api

在APISDK文件夾下新增utils/command.js和utils/http.js文件

//文件目錄
|- APISDK
  |- node_modules
  |- utils
     |- command.js
     |- http.js
  |- apiSdk.js
  |- package-lock.json
  |- package.json

//command.js文件
var path=require("path");
 /** 默認配置文件名 */
var DEFAULT_CONFIG_FILENAME = 'apiSdk.config.json';

var {http} =  require('./http.js')
var fs = require("fs");
/** 默認配置文件模版 */
var INITIAL_CONFIG = {
    outDir: 'src/api',
    services: {},
};

function writeConfigFile(filename, content) {
    fs.writeFileSync(filename, JSON.stringify(content, null, 4));
    
}
// 遞歸創建目錄 同步方法
function mkdirsSync(dirname) {
    if (fs.existsSync(dirname)) {
      return true;
    } else {
      if (mkdirsSync(path.dirname(dirname))) {
        fs.mkdirSync(dirname);
        return true;
      }
    }
}
const BamConfig = {
    /** 初始化 */
    init:function (configFilename, content) {
        
        var f = fs.existsSync(DEFAULT_CONFIG_FILENAME);
        if (!f) {
            throw new Error("already has ".concat(f));
        }
        writeConfigFile(DEFAULT_CONFIG_FILENAME, INITIAL_CONFIG);
        return configFilename;
    },
    update:function (configFilename, content) {
        //判斷當前文件是否存在
        var f = fs.existsSync(DEFAULT_CONFIG_FILENAME);
    console.log('f',fs)
        // 同步讀取文件數據
        var data =  fs.readFileSync(DEFAULT_CONFIG_FILENAME);
        
        //解析當前文件內容
        var str = JSON.parse(data.toString())
        console.log('str',str)
        //同步遞歸創建文件夾
        mkdirsSync(str.outDir)
    
        //配置模版整合需要寫入的內容
        var api =   http.map(item=>{
            var name = item.url.split('/').reverse()[0]
            return `//測試接口 ${name} \n export const ${name} = axios.request( '${item.url}' , '${item.method}', params )`
        })
        //進行寫入
        fs.writeFileSync(`${str.outDir}/http.js`, api.join('\n\n'));
    
        //替換掉默認配置文件路徑,組裝好進行寫入
        INITIAL_CONFIG.outDir = str.outDir
        var apis = http.map(item=>`${item.method} ${item.url}`)
        INITIAL_CONFIG.apis = apis
        writeConfigFile(DEFAULT_CONFIG_FILENAME, INITIAL_CONFIG);
        return configFilename;
    }
}
exports.bamCommand = {
    init:function(option){
        BamConfig.init()
    },
    update:function(option){
        BamConfig.update()
    },
}
//http.js文件
exports.http = [{
    url:'localhost:8888/aa/bb/aa',
    method:'Get',
},{
    url:'localhost:8888/aa/bb/bb',
    method:'POST',
},{
    url:'localhost:8888/aa/bb/cc',
    method:'Get',
},{
    url:'localhost:8888/aa/bb/dd',
    method:'Get',
},]

改寫apiSdk.js文件,其改動為引入上邊的command.js并在action中執行對應命令的方法

#!/usr/bin/env node
"use strict";
var command = require("./utils/command");
var commander_1 = require("commander");
commander_1.program.name('api-test');
commander_1.program
   .command('init')
   .option('--json2js', '配置文件 json 轉 js')
   .description('初始化配置文件')
   .action(function (d, otherD,cmd) {
       console.log('我是init')
       command.bamCommand.init()
});
   console.log('command',command)
commander_1.program
   .command('update')
   .option('--json2js', '配置文件 json 轉 js')
   .description('更新文件')
   .action(function (d, otherD,cmd) {
       console.log('我是update')
       command.bamCommand.update()
});
commander_1.program.parse(process.argv);

http.js是為了模擬后端接口數據,當代碼平臺統一時,我們可以替換成接口獲取所有的接口以及對應參數來進行更深層次的書寫,如接口的請求和返回類型參等。 重新運行api-test initapi-test update命令,apiSdk.config.json寫入apis(apis存入所有的接口簡易信息,在后端有不同的接口服務時,我們同理可根據接口獲取所有接口服務生成配置信息,并 生成api),src/api/http.js 會根據模板生成對應的接口。

怎么在前端中動態生成API接口怎么在前端中動態生成API接口

到此,關于“怎么在前端中動態生成API接口”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

api
AI

鸡泽县| 汝城县| 东乌| 沂南县| 遂昌县| 万荣县| 康保县| 茂名市| 淮安市| 措勤县| 榆树市| 平乐县| 买车| 宁陵县| 黎平县| 济阳县| 昭苏县| 五寨县| 定远县| 峨眉山市| 永年县| 宝山区| 广昌县| 恩平市| 江门市| 南通市| 东辽县| 巴里| 望都县| 屯留县| 宁河县| 汉阴县| 饶平县| 旺苍县| 无为县| 出国| 涿鹿县| 通城县| 翼城县| 西充县| 建昌县|