Skip to content
This repository has been archived by the owner on Apr 16, 2024. It is now read-only.

refactor:初步重构项目结构,分离node server与核心ESM代码 #1858

Closed
wants to merge 20 commits into from

Conversation

2061360308
Copy link
Contributor

@2061360308 2061360308 commented Dec 22, 2023

description

把项目的node部分和其他核心部分代码分开,这样核心代码打包后可以通过其他语言下提供的js引擎进行调用,进而扩展出其他各种SDK

corejs最后希望导出来两个方法:
- beforeRequest
- afterRequest

重构后项目执行逻辑为: beforeRequest拿到请求网易云的数据,对应语言实现网络请求,结果传入afterRequest进行后续处理,拿到返回结果

希望先推送到一个测试的分支,如果大佬们有空的话还请帮忙看看下面Todo列出来的第一项,我自己不懂原理,要改的话只能一点点对比原来生成的和现在生成的参数,然后去猜什么地方出错了,效率极低!

目录结构

N(LR RX4MO}50LPXCMU{4J7

Todo List

  • 排查某些接口不能使用好像都是weapi
这个问题在我编写python的时候就出现了,具体情况表现为:
    Python调用webpack在UMD模式下打包后的ESM库       可用
    node使用ejs文件import导入./corejs/index.js     可用
    node使用cjs文件require导入./corejs/index.js    不可用
返回情况是 data:""状态码显示200 ,此外进一步发现request_param.js所构建返回的参数虽然形式正确但是利用ApiPost工具测试返回情况是 data:""状态码显示200
  • anonymous_token后期传入,或者找到其他移除request_param.js里面关于fspath俩个node库的方法
corejs下不能包含node相关模块。
  • 编写打包工具,自动构建UMD打包,CommonJS转ESM
测试过rollup的转换,其中`node-forge.js`在其代码中判断是否是node环境,是的话使用弄得的crypto库,虽然最后不会用但是会导致打包转换代码后开头会多出一个对crypto的导入,测试手动删除后运行正常,但不能每次手动删除,需要找到自动化方案
  • es5的转换适配?Java中对js的支持好像都比较老,具体还得精通Java的大佬来
  • 其他,各种自动化工作流程类似自动打包并提交python库到pypi,C++等平台的开发

Copy link

vercel bot commented Dec 22, 2023

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
netease-cloud-music-api ✅ Ready (Inspect) Visit Preview 💬 Add feedback Dec 29, 2023 4:35pm

@2061360308
Copy link
Contributor Author

第一个问题已经解决?随手试了几个都是正常返回,但是还没有来得及测试太多的接口。

这个问题就是当初为了适配py_mini_racer环境中没有URLSearchParams全局函数,所以我自己加了一个简易版本的,不过他没有对返回params值中的特殊字符进行编码,导致后续访问data得到空值。

但是这个函数他在pythonpy_mini_racer引擎中运行无误。准确来说,是pythonrequests库使用没有编码的params仍然能够得到正确返回。

目前得到的可能原因是:在 Python 的 requests 库和 JavaScript 的 axios 库中,处理数据的方式略有不同。

在 axios 中,如果你传递一个对象作为 data,它会自动将对象转换为 JSON 字符串,而不是进行 URL 编码。这是因为 axios 默认假设你正在发送 JSON 数据。

在 requests 中,如果你传递一个对象(在 Python 中通常是字典)作为 data,它会直接发送这个对象,而不会将其转换为 JSON 字符串。当你使用 requests.post(或其他类似的方法,如 requests.get、requests.put 等)并传递一个字典作为 data 参数时,requests 会将这个字典转换为一个查询字符串,并对所有的键和值进行 URL 编码。

由于时间仓促,我后续会测试这次更改是否会对pythonrequests库请求造成影响。如果是的话,我会将编码特殊字符的任务留给各个平台下的SDK自己处理,而不是像现在这样统一返回编码后的url参数

@2061360308
Copy link
Contributor Author

编码后requests库得不到正确结果了,离谱

@2061360308
Copy link
Contributor Author

sdk drawio

坐等Binaryify处理游客登录register_anonimous用到node的Buffer那块

Binaryify added a commit that referenced this pull request Dec 25, 2023
@Binaryify
Copy link
Owner

好了,重构了

Jerry-FaGe pushed a commit to Jerry-FaGe/NeteaseCloudMusicApi that referenced this pull request Dec 28, 2023
@2061360308
Copy link
Contributor Author

开发文档进行了下更新,https://github.com/2061360308/NeteaseCloudMusicApi/blob/api_new/sdk.md
觉得有需要改正的地方可以留言,后续我会把它补充完善

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants