NodeJS笔记-ExpressJS框架相关

这篇随笔记录一些Express和Nodejs 服务端开发的一些问题及记录,随缘更新..

---------------------------------------------------------------------------------------------------------

在做Vue前端开发的时候,经常使用ExpressJS + FakerJS 来模拟API接口数据...

(虽然有mockjs的api模拟框架..但是mockjs重写了xmlhttpRequest,导致很多npm库不能使用...如threejs....所以不太推荐使用Mockjs那玩意,吐槽:jser总是会时不时的开发出一些奇奇怪怪的框架)

 ------------------------------ 割割割 ------------------------------ 

------------------------------ 割割割 ------------------------------ 

 note:例子是TS语言...

Q.ExpressJS http返回中文乱码问题解决:

res.setHeader('Content-Type', 'text/html;charset=utf-8');

Express中推荐全局或路由中使用过滤器进行批量注入标头:

  /** 中间件http头设置 */
  app.all('*', (req, res, next) =>
  {
    res.setHeader('Content-Type', 'text/html;charset=utf-8');
    next();
  });

Q.Expressjs添加静态资源路径,设置Expressjs静态资源路径的URL相对访问路径:

以某个route为例:

const route = Route();
route.use(express.static(path.join(__dirname,'../', '../', 'public'), { extensions:['*'], setHeaders: (res:express.Response, path: string, stat:BigIntStats)=> { //浏览器请求后直接下载到磁盘,不需要请注销 res.setHeader('Content-Type', 'application/octet-stream;'); } }));

//设置相对路径为/asset
 app.use('/asset', assetRoute);

Q.ExpressJS 支持Content-Range分段/分片下载例子:

以某个Route为例,

例子是以本地硬盘中的资源文件作为分段资源.....如果是内存数据或对象请自行计算大小和分段规则:

route.get(/public\/*.*/, (req, res, next) =>
{
  let range = req.headers["range"];

  let filepath:string = path.join( __dirname, '../', '../',  decodeURI(url.parse((req.url),true).pathname!)  );

  res.setHeader('Content-Type', 'application/octet-stream;');
  if (range == undefined) 
  {
    res.statusCode = 200;
    res.download(filepath);
return ;
  }

  if ( !existsSync(filepath) )
  {
    res.statusCode = 404;
    res.end(`not is found...${filepath}` );
    return ;
  }

  let [start, end] = range.match(/(\d*)-(\d*)/)!;

  let stats = statSync(filepath);
  
  let total = stats.size;
  let byte_start = start ? parseInt(start)  : 0;
  let byte_end   = end   ? parseInt(end)    : total - 1;

  res.setHeader('Accept-Ranges', 'bytes');
  res.setHeader('Content-Range', `bytes ${byte_start}-${byte_end}/${total}`);

  res.statusCode = 206;
  fs.createReadStream(filepath, { start :byte_start, end : byte_end }).pipe(res);
});

猜你喜欢

转载自www.cnblogs.com/linqing/p/12179820.html