1、新建 express 实例应用,解析url、json、接入路由,监听端口
const express = require('express')
const app = express();
app.use(express.urlencoded({ extended: false }))
app.use(express.json())
const Router = require('./router')
app.use(Router)
app.listen(3200,()=>{
console.log('App listening on port 3200!')
})
2、处理流媒体文件
const express = require('express');
const fs = require('fs')
const route = express.Router();
route.get('/music/:fileName', async (req, res) => {
let fileName = req.params.fileName;
let range = req.headers.range;
let audioUrl = `./audios/${fileName ?? ''}`;
if (range) {
let stat = await fs.promises.stat(audioUrl);
let rangeArr = range.match(/=(\d+)-(\d+)?/);
let rangeStart = parseInt(rangeArr[1], 10);
let rangeEnd = rangeArr[2] ? parseInt(rangeArr[2], 10) : stat.size;
console.log('hello world',{fileName,rangeStart,rangeEnd,totalSize:stat.size})
if (rangeEnd > stat.size - 1) {
rangeEnd = stat.size - 1
}
let header = {
"Content-Type": "audio/mpeg;charset=UTF-8",
"Content-Range": `bytes ${rangeStart} - ${rangeEnd} / ${stat.size}`,
"Content-Length": rangeEnd - rangeStart + 1,
"Accept-Ranges": 'bytes',
}
res.writeHead(206, header);
let readStream = fs.createReadStream(audioUrl, { start: rangeStart, end: rangeEnd });
readStream.pipe(res)
} else {
let readStream = fs.createReadStream(audioUrl,);
readStream.pipe(res)
}
})
module.exports = route