首页 > Web开发 > 详细

NodeJS笔记-ExpressJS框架相关

时间:2020-01-11 16:38:28      阅读:65      评论:0      收藏:0      [点我收藏+]

这篇随笔记录一些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);
});

 

NodeJS笔记-ExpressJS框架相关

原文:https://www.cnblogs.com/linqing/p/12179820.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!