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