云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

大带宽_生活大爆炸第一季百度云_新注册优惠

小七 141 0

调试无服务器应用程序

Workers团队已经完成了一项惊人的工作,在Workers IDE中创建了一个功能性的、熟悉的编辑和调试工具体验。它是完全集成到工人身上的Chrome开发工具。控制台.log在您的Worker中直接转到控制台,就像您在本地调试一样!此外,错误甚至日志行都带有调用站点信息,因此您可以单击并直接导航到相关行。在这篇博客文章中,我将展示一个小而强大的技术,我用来使调试无服务器应用程序变得简单而快速。这里有一个关于常见调试方法的全面指南,我将重点介绍在头中返回调试信息。这是一个很好的技巧,当我使用curl、Postman或集成测试时,我用它来捕获调试信息。第一次做对了有点挑剔,让我帮你省去一些麻烦吧。如果您已经阅读了我的Workers系列文章的第1部分或第2部分,您就会知道我使用的是Typescript,但是这种方法同样适用于Javascript。在本例的其余部分中,我将使用我在第2部分中创建的路由框架。正在请求调试信息我希望我的工作人员在以下时间返回调试信息:存在X-Debug标头或a?存在调试参数。读者练习:您可能还需要一个共享密钥(以便控制谁可以启用调试信息)并传递一个日志级别。我希望我的调试信息与我在Workers IDE中看到的一样。也就是说,所有的日志行和执行我的Worker的异常信息。建筑日志记录与主请求流是正交的,所以让我们尝试保持它的抽象性。不同的框架对这种抽象使用不同的术语。我会用拦截器这个词。让我们将拦截器定义为在主请求流之前和/或之后运行的东西。/***在处理程序之前拦截请求,在处理程序之后拦截响应*/导出接口接口接口{预处理(req:RequestContextBase):void;后处理(req:RequestContextBase,res:Response):void;}然后在处理程序执行之前和之后运行预处理和后处理。公共异步句柄(request:request):Promise{这个。预处理(要求);常量处理程序=这个路线(要求);const res=等待处理程序.句柄(要求);后处理(要求,回复);返回res;}私有预处理(req:RequestContextBase){for(const拦截器这是拦截器) {拦截器.预处理(要求);}}私有后处理(req:RequestContextBase,res:Response){for(const拦截器这是拦截器) {拦截器.后处理(要求,回复);}}好的,使用一个在请求前后执行代码的通用模式,让我们添加第一个拦截器:逻辑接受器首先我们需要一个记录员。这个记录器只是重定向到控制台,但也会跟踪日志行,以便拦截器可以稍后检索它们。导出类记录器实现ILogger{公共日志行:string[]=[];公共调试(logLine:string):void{此.log(`DEBUG:${logLine}`);}公共信息(logLine:string):void{此.log(`INFO:${logLine}`);}公共警告(logLine:string):void{此.log(`WARN:${logLine}`);}公共错误(logLine:string):void{此.log(`ERROR:${logLine}`);}public getLines():字符串[]{返回这是logLines;}public clear():无效{这是logLines= [];}私有日志(logLine:string):void{// tslint:禁用下一行:无控制台控制台.log(日志线);这个。logLines。推(日志线);}}LogInterceptor在后处理中非常简单,如果它检测到X-Debug头或Debug查询参数,它会将所有日志行作为URL编码的字符串添加到X-Debug响应头中。const logger=新建logger();导出类LogInterceptor实现IInterceptor{公共预处理(req:RequestContextBase){返回;}公共后处理(req:RequestContextBase,res:Response){logger.debug("正在评估日志记录请求");const debugHeader='X-Debug';如果(req.url.searchParams.get('debug')!=='真'&&请求标题.get(debugHeader)!=='真') {返回;}logger.debug('Executing log interceptor');常量行=logger.getLines();const logStr=编码组件(线条。连接('\n'));logger.debug(`Adding to${debugHeader}头${对数长度}字符");res.headers.append(debugHeader,logStr);}}现在由客户端来显示。解码结果urldecode在大多数操作系统上不是本机的。有Perl和Python实现,但这里有一个仅限于Bash的函数:$urldecode(){:"${*/+/}";echo-e"${u//%/\\ x}";}来源:StackOverflow使用它,我们可以为X-Debug头调用curl、提取头、grep,然后调用urldecode函数。$urldecode`curl-sD--o/dev/nullhttps://cryptoserviceworker.com/api/all/spot/btc-usd-高X-调试:真"| grep x-debug`x-debug:信息:处理:https://cryptoserviceworker.com/api/all/spot/btc-usd调试:没有处理程序,正在从工厂获取调试:找到了/api/all/spot/btc-usd的处理程序调试:spot,"btc-usd"]调试:从获取spothttps://api.gdax.com/products/btc-usd/ticker调试:spot,"btc-usd"]调试:正在分析点。。。信息:GDAX response{"trade_id":45329353,"price":"6287.01000000","size":"0.03440000","bid":"6287","ask":"6287.01","volume":"9845.51680796","time":"2018-06-25T18:12:48.282000Z"}信息:Bitfinex response{"mid":"6283.45","bid":"6283.4","ask":"6283.5","last_price":"6283.5","low":"6068.5","high":"6341.0","volume":"28642.882017660013","timestamp":"1529950365.0694907"}调试:评估日志记录请求调试:执行日志侦听器繁荣。在控制台上解码了调试信息。发货吧。如果您使用记录器.错误(e.stack),格式也很好:$urldecode`curl-sD--o/dev/nullhttps://cryptoserviceworker.com/api/all/spot/btc-usd-高X-调试:真"| grep x-debug`x-debug:信息:处理:https://cryptoserviceworker.com/api/all/spot/btc-usd错误:错误:boom在路由器。(工人。js:118:35分)步调一致(工人。js:32:23)在对象。下一个(工人。js:13:53)在工人.js:7点71分在新承诺()在等待者(工人.js:3:12)在路由器.句柄(工人。js:111:16)在工人。js:48:42分步调一致(工人。js:32:23)在对象。下一个(工人。js:13:53)调试:评估日志记录请求调试:执行日志侦听器摘要在本文中,我们:定义了一个使用拦截器的预处理和后处理框架实现了一个LogInterceptor来返回在X-Debug头中处理时生成的日志在bash中解码愿日志与你同在。