塞壬唱片后台 Nodejs API
因为接口不是很多,就算是个小玩具来玩,也可以将其作为一些作业的后台使用
灵感与部分源码来源:
https://github.com/Binaryify/NeteaseCloudMusicApi
node v16.15.0 及以上
git clone https://github.com/QingXia-Ela/MonsterSirenApi.git
cd MonsterSirenApi
pnpm i
npm start
npm i monster-siren-api
import { albums, album_$id_data } from 'monster-siren-api'
// 直接使用,不需要参数
albums().then(({data}) => {
console.log(data)
})
// 搭配参数使用,具体请参考接口一览文档,也可以通过 ts 声明查看
album_$id_data({ id: 6667 }).then(({data}) => {
console.log(data)
})
每个 api 均有对应的 ts 声明,也可以查看 接口一览 进行查询
目前所有接口都是 get 请求,只有还没有做的登录接口会有 post 与 options
假设我们要引入查询专辑数据的 api,他的路径是这样的:/album/:id/data
,其中包含 id
params。我们只需要将 /
替换为 _
、:
替换为 $
即为 api 的别名
如果你觉得这样子引入很难受,那么可以通过 as
关键字改名字:import { album_$id_data as aid } from 'monster-siren-api
注意!虽然这些可以在浏览器中引入,但是其本质是直接发起请求,没有处理跨域,所以浏览器不能直接使用;如果使用 electron 或 tauri 等可以通过重写请求方法来处理跨域:
// api
import { search } from 'monster-siren-api/api'
// tauri 可跨域 fetch
import { fetch } from '@tauri-apps/api/http'
// 发起请求时重写请求方法
search({
request: async (method, url) => {
return await fetch(url, { method })
}
})
// 照常接收数据
.then(({ data }) => { })
注意!只支持Nodejs!
import server from 'monster-siren-api'
server({
// 可自定义端口号
port: 3000
}).then((e) => {
// 返回 express 服务器实例
console.log(e)
})
Nodejs 需要支持 --experimental-specifier-resolution=node
实验性特色功能,因为开发过程中没有为 ts 文件添加扩展名,ts 实时编译也不会携带扩展名
由于当初架构设计不合理等一系列原因,扩展接口变成了一件比较麻烦的事情,具体体现在接收的参数需要在扩展接口内自行解构,然后并放置到 body, params
等对应位置
可以看源码是怎么处理那堆屎山的,如果有更好的想法本人十分甚至九分欢迎 PR !