neovim借助nodejs获取网络数据

主要的目的是得到babylon.js网站上的代码段,这样就可以在vite里查看了。

// main.ts
    plugin.registerCommand(
        'BabySnippet',
        async () => {
            try {
                logger.info("BabySnippet")
                await get_snippet(plugin);
            } catch (err) {
                logger.info("BabySnippet err"+err)
                console.error(err);
            }
        },
        { sync: false },
    );
// baby_util.ts
import { NvimPlugin,logger } from 'neovim';
import { get } from './http_util'

export async function  get_snippet(plugin: NvimPlugin){
    let current_line = await plugin.nvim.getLine()
    let matches = current_line.match(/id="([^"]+)"/)
    if(matches && matches[1]){
        let id = matches[1] as string
        id = id.replace('#','/')
        id = id.replace('#','/')
        id = id.replace('#','/')
        let url = 'https://snippet.babylonjs.com'+id
        get(url,async (data:string, code:number)=>{
            logger.info('Line code:'+code)
            let data_obj:any = JSON.parse(data)
            let payload = data_obj.jsonPayload
            let pay_obj = JSON.parse(payload)
            let pay_code:string = pay_obj.code
            let codes:string[] = pay_code.split('\n')
            codes.unshift("``` js")
            codes.push("```")
            let cursor = await plugin.nvim.window.cursor
            let start = cursor[0]
            await plugin.nvim.buffer.setLines(codes,{start,end:start});
            return ''
        })
    }
}
// http_util.ts
import * as https from 'https'
import * as http from 'http'
import {logger} from 'neovim'

export function get(url:string,call_back:(data:string,code:number)=>Promise<string>){

    https.get(url,function(res:http.IncomingMessage){
        let code = res.statusCode

        logger.info("http code:"+code)
        res.setEncoding('utf8');

        let rawData = '';
        res.on('data', (chunk) => {
            logger.info("http data:"+chunk)
            rawData += chunk;
        });

        res.on('end', () => {
            try {
                logger.info("http data ok:")
                call_back(rawData,code);
            } catch (e) {
                logger.info("http data err:"+e.message)
                console.error(e.message);
            }
        });
    }).on('error', (e) => {
        logger.info("http get err:"+e.message)
    });
}
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!