Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
嘻哈兔来辽
NeteaseCloudMusicApi
提交
d1ae7f4b
N
NeteaseCloudMusicApi
项目概览
嘻哈兔来辽
/
NeteaseCloudMusicApi
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
N
NeteaseCloudMusicApi
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
d1ae7f4b
编写于
10月 05, 2018
作者:
N
Nzix
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
no intrusive with legacy code
上级
71d83238
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
63 addition
and
77 deletion
+63
-77
app.js
app.js
+49
-64
util/init.js
util/init.js
+1
-1
util/request.js
util/request.js
+13
-12
未找到文件。
app.js
浏览文件 @
d1ae7f4b
...
...
@@ -42,14 +42,6 @@ app.use(cache('2 minutes', onlyStatus200))
app
.
use
(
express
.
static
(
path
.
resolve
(
__dirname
,
'
public
'
)))
app
.
use
(
function
(
req
,
res
,
next
)
{
const
proxy
=
req
.
query
.
proxy
if
(
proxy
)
{
req
.
headers
.
cookie
+=
`__proxy__
${
proxy
}
`
}
next
()
})
// 补全缺失的cookie
const
{
completeCookie
}
=
require
(
'
./util/init
'
)
app
.
use
(
function
(
req
,
res
,
next
)
{
...
...
@@ -59,6 +51,24 @@ app.use(function(req, res, next) {
next
()
})
// cookie parser
app
.
use
(
function
(
req
,
res
,
next
)
{
req
.
cookies
=
{},
(
req
.
headers
.
cookie
||
''
).
split
(
/
\s
*;
\s
*/
).
forEach
(
pair
=>
{
let
crack
=
pair
.
indexOf
(
'
=
'
)
if
(
crack
<
1
||
crack
==
pair
.
length
-
1
)
return
req
.
cookies
[
decodeURIComponent
(
pair
.
slice
(
0
,
crack
)).
trim
()]
=
decodeURIComponent
(
pair
.
slice
(
crack
+
1
)).
trim
()
})
next
()
})
app
.
use
(
function
(
req
,
res
,
next
)
{
const
proxy
=
req
.
query
.
proxy
if
(
proxy
)
{
req
.
headers
.
cookie
+=
`__proxy__
${
proxy
}
`
}
next
()
})
// 因为这几个文件对外所注册的路由 和 其他文件对外注册的路由规则不一样, 所以专门写个MAP对这些文件做特殊处理
const
UnusualRouteFileMap
=
{
// key 为文件名, value 为对外注册的路由
...
...
@@ -72,66 +82,41 @@ const { createWebAPIRequest, request } = require('./util/util')
const
Wrap
=
fn
=>
(
req
,
res
)
=>
fn
(
req
,
res
,
createWebAPIRequest
,
request
)
// 同步读取 router 目录中的js文件, 根据命名规则, 自动注册路由
fs
.
readdirSync
(
path
.
resolve
(
__dirname
,
'
router
'
))
.
reverse
()
.
forEach
(
file
=>
{
if
(
/
\.
js$/i
.
test
(
file
)
===
false
)
{
return
}
let
route
if
(
typeof
UnusualRouteFileMap
[
file
]
!==
'
undefined
'
)
{
route
=
UnusualRouteFileMap
[
file
]
}
else
{
route
=
'
/
'
+
file
.
replace
(
/
\.
js$/i
,
''
)
.
replace
(
/_/g
,
'
/
'
)
}
app
.
use
(
route
,
Wrap
(
require
(
'
./router/
'
+
file
)))
})
const
requestMod
=
require
(
'
./util/request
'
)
let
dev
=
express
()
fs
.
readdirSync
(
path
.
resolve
(
__dirname
,
'
module
'
))
.
reverse
()
.
forEach
(
file
=>
{
if
(
/
\.
js$/i
.
test
(
file
)
===
false
)
{
return
}
let
route
fs
.
readdirSync
(
path
.
join
(
__dirname
,
'
router
'
))
.
reverse
()
.
forEach
(
file
=>
{
if
(
!
/
\.
js$/i
.
test
(
file
))
return
let
route
=
(
file
in
UnusualRouteFileMap
)
?
UnusualRouteFileMap
[
file
]
:
'
/
'
+
file
.
replace
(
/
\.
js$/i
,
''
).
replace
(
/_/g
,
'
/
'
)
app
.
use
(
route
,
Wrap
(
path
.
join
(
__dirname
,
'
router
'
,
file
)))
})
if
(
typeof
UnusualRouteFileMap
[
file
]
!==
'
undefined
'
)
{
route
=
UnusualRouteFileMap
[
file
]
}
else
{
route
=
'
/
'
+
file
.
replace
(
/
\.
js$/i
,
''
)
.
replace
(
/_/g
,
'
/
'
)
}
dev
.
use
(
route
,
(
req
,
res
)
=>
{
let
question
=
require
(
'
./module/
'
+
file
)
let
query
=
{...
req
.
query
,
cookie
:
req
.
headers
.
cookie
}
question
(
query
,
requestMod
)
.
then
(
answer
=>
{
console
.
log
(
'
[OK]
'
,
req
.
originalUrl
)
res
.
append
(
'
Set-Cookie
'
,
answer
.
cookie
)
res
.
status
(
answer
.
code
).
send
(
answer
.
body
)
})
.
catch
(
answer
=>
{
console
.
log
(
'
[ERROR]
'
,
req
.
originalUrl
)
res
.
append
(
'
Set-Cookie
'
,
answer
.
cookie
)
res
.
status
(
answer
.
code
).
send
(
answer
.
body
)
})
// 改写router为module
const
requestMod
=
require
(
'
./util/request
'
)
let
dev
=
express
()
fs
.
readdirSync
(
path
.
join
(
__dirname
,
'
module
'
))
.
reverse
()
.
forEach
(
file
=>
{
if
(
!
(
/
\.
js$/i
.
test
(
file
)))
return
let
route
=
(
file
in
UnusualRouteFileMap
)
?
UnusualRouteFileMap
[
file
]
:
'
/
'
+
file
.
replace
(
/
\.
js$/i
,
''
).
replace
(
/_/g
,
'
/
'
)
let
question
=
require
(
path
.
join
(
__dirname
,
'
module
'
,
file
))
dev
.
use
(
route
,
(
req
,
res
)
=>
{
let
query
=
{...
req
.
query
,
cookie
:
req
.
cookies
}
question
(
query
,
requestMod
)
.
then
(
answer
=>
{
console
.
log
(
'
[OK]
'
,
decodeURIComponent
(
req
.
originalUrl
))
res
.
append
(
'
Set-Cookie
'
,
answer
.
cookie
)
res
.
status
(
answer
.
status
).
send
(
answer
.
body
)
})
.
catch
(
answer
=>
{
console
.
log
(
'
[ERR]
'
,
decodeURIComponent
(
req
.
originalUrl
))
res
.
append
(
'
Set-Cookie
'
,
answer
.
cookie
)
res
.
status
(
answer
.
status
).
send
(
answer
.
body
)
})
})
app
.
use
(
'
/dev
'
,
dev
)
})
app
.
use
(
'
/dev
'
,
dev
)
const
port
=
process
.
env
.
PORT
||
3000
...
...
util/init.js
浏览文件 @
d1ae7f4b
function
randomString
(
pattern
,
length
){
return
Array
.
apply
(
null
,
{
length
:
length
}).
map
(()
=>
(
pattern
[
Math
.
floor
(
Math
.
random
()
*
pattern
.
length
)])).
join
(
''
)
return
Array
.
apply
(
null
,
{
length
:
length
}).
map
(()
=>
(
pattern
[
Math
.
floor
(
Math
.
random
()
*
pattern
.
length
)])).
join
(
''
)
}
function
completeCookie
(
cookie
){
...
...
util/request.js
浏览文件 @
d1ae7f4b
...
...
@@ -2,7 +2,7 @@ const encrypt = require('./crypto.js')
const
request
=
require
(
'
request
'
)
const
queryString
=
require
(
'
querystring
'
)
request
.
debug
=
false
//
request.debug = false
function
chooseUserAgent
(
ua
)
{
const
userAgentList
=
[
...
...
@@ -36,27 +36,28 @@ function chooseUserAgent(ua) {
function
createRequest
(
method
,
url
,
data
,
options
){
return
new
Promise
((
resolve
,
reject
)
=>
{
if
(
options
.
crypto
==
'
weapi
'
){
const
csrfToken
=
(
options
.
cookie
||
''
).
match
(
/_csrf=
([^
(;|$)
]
+
)
/
)
data
.
csrf_token
=
(
csrfToken
?
csrfToken
[
1
]
:
''
)
data
=
encrypt
(
data
)
}
let
headers
=
{
'
User-Agent
'
:
chooseUserAgent
(
options
.
ua
)}
if
(
options
.
cookie
)
headers
[
'
Cookie
'
]
=
options
.
cookie
if
(
method
.
toUpperCase
()
==
'
POST
'
)
headers
[
'
Content-Type
'
]
=
'
application/x-www-form-urlencoded
'
if
(
url
.
indexOf
(
'
music.163.com
'
)
!=
-
1
)
headers
[
'
Referer
'
]
=
'
http://music.163.com
'
// headers['X-Real-IP'] = '118.88.88.88'
const
answer
=
{
code
:
502
,
body
:
{
code
:
502
},
cookie
:
[]
if
(
typeof
(
options
.
cookie
)
===
'
object
'
)
headers
[
'
Cookie
'
]
=
Object
.
keys
(
options
.
cookie
).
map
(
key
=>
(
encodeURIComponent
(
key
)
+
'
=
'
+
encodeURIComponent
(
options
.
cookie
[
key
]))).
join
(
'
;
'
)
else
if
(
options
.
cookie
)
headers
[
'
Cookie
'
]
=
options
.
cookie
if
(
options
.
crypto
==
'
weapi
'
){
const
csrfToken
=
(
headers
[
'
Cookie
'
]
||
''
).
match
(
/_csrf=
([^
(;|$)
]
+
)
/
)
data
.
csrf_token
=
(
csrfToken
?
csrfToken
[
1
]
:
''
)
data
=
encrypt
(
data
)
}
const
answer
=
{
status
:
500
,
body
:
{},
cookie
:
[]}
request
(
{
method
:
method
,
url
:
url
,
headers
:
headers
,
body
:
queryString
.
stringify
(
data
),
proxy
:
options
.
proxy
},
(
err
,
res
,
body
)
=>
{
if
(
err
){
answer
.
status
=
502
answer
.
body
=
{
code
:
502
,
msg
:
err
.
stack
}
reject
(
answer
)
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录