Miao-api / app.js
guge123's picture
Update app.js
e1e3bca verified
import express from 'express'
import fs from 'fs'
import moment from 'moment'
import mime from 'mime'
import { exec } from 'child_process'
const app = express()
const port = 7860
setInterval(() => {
exec('cd data && git pull', (err, stdout, stderr) => {
if (err) return console.error(`[${moment().format('YYYY-MM-DD HH:mm:ss')}] git pull 错误: ${err}`)
if (stdout) console.log(`[${moment().format('YYYY-MM-DD HH:mm:ss')}] git pull 输出: ${stdout}`)
if (stderr) return console.error(`[${moment().format('YYYY-MM-DD HH:mm:ss')}] git pull 异常输出: ${stderr}`)
})
}, 1 * 60 * 60 * 1000)
app.get('/api/miao', (req, res) => {
let name = req.query.name
let ip = req.headers['x-forwarded-for'] || req.socket.remoteAddress
console.log(`[${moment().format('YYYY-MM-DD HH:mm:ss')}] 访问者IP: ${ip},name:${name}`)
if (!name || !fs.existsSync(`./data/normal-character/${name}`)) {
if (!name) {
let folders = fs.readdirSync('./data')
name = folders[Math.floor(Math.random() * folders.length)]
} else {
res.status(404).send({ error: '不存在此目录。' })
return
}
}
fs.readdir(`./data/normal-character/${name}`, (err, files) => {
if (err) {
res.status(500).send({ error: '读取目录时发生错误。' })
} else if (files.length === 0) {
res.status(404).send({ error: '目录为空。' })
} else {
let randomFile = files[Math.floor(Math.random() * files.length)]
let filePath = `${process.cwd()}/data/normal-character/${name}/${randomFile}`
console.log(`[${moment().format('YYYY-MM-DD HH:mm:ss')}] 返回的图片: ${filePath}`)
let type = mime.getType(filePath)
res.setHeader('Content-Type', type)
res.setHeader('Content-Disposition', 'inline')
res.sendFile(filePath)
}
})
})
app.use((err, req, res, next) => {
console.error(err.stack)
res.status(500).send({ error: '服务器内部错误。' })
})
app.listen(port, '0.0.0.0', () => {
console.log(`[${moment().format('YYYY-MM-DD HH:mm:ss')}] 服务器正在运行于 http://127.0.0.1:${port}/api/miao`)
})