1、新建 express 实例应用,解析url、json、接入路由,监听端口

  1. const express = require('express')
  2. const app = express();
  3. app.use(express.urlencoded({ extended: false }))
  4. app.use(express.json())
  5. const Router = require('./router')
  6. app.use(Router)
  7. app.listen(3200,()=>{
  8. console.log('App listening on port 3200!')
  9. })

2、处理流媒体文件

  1. const express = require('express');
  2. const fs = require('fs')
  3. const route = express.Router();
  4. route.get('/music/:fileName', async (req, res) => {
  5. let fileName = req.params.fileName;
  6. let range = req.headers.range;
  7. let audioUrl = `./audios/${fileName ?? ''}`;
  8. if (range) {
  9. let stat = await fs.promises.stat(audioUrl);
  10. let rangeArr = range.match(/=(\d+)-(\d+)?/);
  11. let rangeStart = parseInt(rangeArr[1], 10);
  12. let rangeEnd = rangeArr[2] ? parseInt(rangeArr[2], 10) : stat.size;
  13. console.log('hello world',{fileName,rangeStart,rangeEnd,totalSize:stat.size})
  14. if (rangeEnd > stat.size - 1) {
  15. rangeEnd = stat.size - 1
  16. }
  17. let header = {
  18. "Content-Type": "audio/mpeg;charset=UTF-8",
  19. "Content-Range": `bytes ${rangeStart} - ${rangeEnd} / ${stat.size}`,
  20. "Content-Length": rangeEnd - rangeStart + 1,
  21. "Accept-Ranges": 'bytes',
  22. }
  23. res.writeHead(206, header);
  24. let readStream = fs.createReadStream(audioUrl, { start: rangeStart, end: rangeEnd });
  25. readStream.pipe(res)
  26. } else {
  27. let readStream = fs.createReadStream(audioUrl,);
  28. readStream.pipe(res)
  29. }
  30. })
  31. module.exports = route