app.js 2.9 KB
Newer Older
B
binaryify 已提交
1
const fs = require('fs')
N
Nzix 已提交
2 3
const path = require('path')
const express = require('express')
N
Nzix 已提交
4
const bodyParser = require('body-parser')
N
Nzix 已提交
5 6 7 8
const request = require('./util/request')
const package = require('./package.json')
const exec = require('child_process').exec
const cache = require('apicache').middleware
J
jjeejj 已提交
9

N
Nzix 已提交
10 11 12 13 14 15 16 17
// version check
exec('npm info NeteaseCloudMusicApi version', (err, stdout, stderr) => {
    if(!err){
        let version = stdout.trim()
        if(package.version < version){
            console.log(`最新版本: ${version}, 当前版本: ${package.version}, 请及时更新`)
        }
    }
B
binaryify 已提交
18
})
B
improve  
binaryify 已提交
19

N
Nzix 已提交
20
const app = express()
21

N
Nzix 已提交
22
// CORS
N
Nzix 已提交
23
app.use((req, res, next) => {
N
Nzix 已提交
24 25 26 27 28 29 30 31 32 33
    if(req.path !== '/' && !req.path.includes('.')){
        res.header({
            'Access-Control-Allow-Credentials': true,
            'Access-Control-Allow-Origin': req.headers.origin || '*',
            'Access-Control-Allow-Headers': 'X-Requested-With',
            'Access-Control-Allow-Methods': 'PUT,POST,GET,DELETE,OPTIONS',
            'Content-Type': 'application/json; charset=utf-8'
        })
    }
    next()
34 35
})

N
Nzix 已提交
36
// cookie parser
N
Nzix 已提交
37
app.use((req, res, next) => {
N
Nzix 已提交
38 39 40 41 42 43
    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()
N
Nzix 已提交
44 45
})

N
Nzix 已提交
46 47 48 49
// body parser
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended: false}))

N
Nzix 已提交
50 51
// cache
app.use(cache('2 minutes', ((req, res) => res.statusCode === 200)))
N
Nzix 已提交
52

N
Nzix 已提交
53 54
// static
app.use(express.static(path.join(__dirname, 'public')))
55

N
Nzix 已提交
56 57 58 59 60 61
// router
const special = {
    'daily_signin.js': '/daily_signin',
    'fm_trash.js': '/fm_trash',
    'personal_fm.js': '/personal_fm'
}
N
Nzix 已提交
62

N
Nzix 已提交
63 64 65 66 67 68
fs.readdirSync(path.join(__dirname, 'module')).reverse().forEach(file => {
    if(!(/\.js$/i.test(file))) return
    let route = (file in special) ? special[file] : '/' + file.replace(/\.js$/i, '').replace(/_/g, '/')
    let question = require(path.join(__dirname, 'module', file))
    
    app.use(route, (req, res) => {
N
Nzix 已提交
69
        let query = Object.assign({}, req.query, req.body, {cookie: req.cookies})
N
Nzix 已提交
70 71 72 73 74 75 76 77 78 79 80 81
        question(query, request)
        .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))
            if(answer.body.code =='301') answer.body.msg = '需要登录'
            res.append('Set-Cookie', answer.cookie)
            res.status(answer.status).send(answer.body)
        })
N
Nzix 已提交
82
    })
N
Nzix 已提交
83
})
N
Nzix 已提交
84

B
binaryify 已提交
85
const port = process.env.PORT || 3000
86

N
Nzix 已提交
87
app.server = app.listen(port, () => {
N
Nzix 已提交
88
    console.log(`server running @ http://localhost:${port}`)
B
binaryify 已提交
89
})
90

B
binaryify 已提交
91
module.exports = app