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

负载均衡_文件云存储_怎么买

小七 141 0

工人故事的节点

节点.js允许开发人员使用JavaScript构建web服务。但是,在注册域、设置DNS、管理服务器进程和设置构建时,您必须自己动手。没有理由在不同的平台上管理所有这些层。对于Cloudflare上的站点,这些层可以位于单个平台上。无服务器技术简化了开发人员的生活,并重新定义了后端。输入本文中,我将通过一个简单的示例,演示如何将以前的节点服务器转换为Worker,从而理清团队代码库的一部分。此示例的转换为Workers可以在Github.BackgroundCloudflareMarketplace托管了多种应用程序,其中大多数由第三方开发者开发,但也有一些由Cloudflare员工制作。Spotify应用程序是由Cloudflare应用程序团队编写的应用程序之一。此应用程序需要一个带有Spotify的OAuth流来检索用户的令牌并收集播放列表、艺术家和其他Spotify配置文件特定的信息。Cloudflare管理OAuth身份验证部分,而应用所有者(在本例中为Cloudflare Apps)管理使用令牌调用Spotify并格式化适当响应的小型集成服务。奇怪的是,这个Spotify-OAuth集成被破坏了。Cloudflare的团队渴望保持敏捷、适应性和不断学习。当前的Cloudflare应用程序团队不再包括开发Spotify OAuth集成的原始团队。因此,目前的团队不知道应用程序为什么会崩溃。虽然我们有各种警报和日志记录系统,但是spotifyoauth服务器在云中丢失了。我们解决这个问题的第一步是追踪OAuth流到底在哪里。在经历了几个潜在平台的洗牌后——GCloud、AWS、Digital Ocean。。-我们发现服务是在Heroku上。引入的平台越多,部署和访问管理就越复杂。我决定通过简单地创建一个无服务器的Cloudflare Worker来减少服务层的数量,不需要维护,不需要新的登录,也没有唯一的后端配置。这里我就是这么做的它。再见node旧服务使用节点.js以及快捷应用程序帖子('/blah',函数(请求、响应){这说明对于每个发送到端点/blah的POST,都要使用请求和响应对象作为参数来执行回调函数。Cloudflare worker构建在serviceworks规范之上,我们需要响应'fetch'事件,而不是像Express那样对response对象进行变异和调用方法。下面的代码为fetch事件(对worker的传入请求)添加一个事件侦听器,将FetchEvent作为第一个参数接收。FetchEvent有一个名为respondWith的特殊方法,它接受Response的实例或解析为响应的Promise。addEventListener("获取",事件=>{事件响应(新的回应是:"你好,世界!’));});为了避免在我的worker中重新实现路由逻辑,我制作了自己的应用程序。常量应用={get:(端点,fn)=>{url=新url(请求.url);如果(url.路径名===端点&&请求.方法==="获取")返回fn(请求);返回空值;},post:(端点,fn)=>{url=新url(请求.url);如果(url.路径名===端点&&请求.方法==="发布")返回fn(请求);返回空值;}};现在有了应用程序集,我打电话来应用程序获取(..)类似于我在处理程序的Node中所做的操作。我只需要确保处理程序返回正确的应用程序。异步函数handleRequest(请求){上次响应=应用程序发布("/",异步函数(请求){..}if(上次响应){返回lastResponse;}上次响应=应用程序获取("/",异步函数(请求){if(上次响应){返回lastResponse;}lastResponse确保我们一直监听所有端点方法。另一件需要改变的事情是响应的返回。在那之前响应.json(),因此最终响应将是JSON类型。响应.json({继续:错误,错误:[{type:'400',消息:错误.toString()}]在workers中,我需要返回respondWith函数的类型响应。我替换了响应.json或者响应.发送状态一个新的响应对象。返回新响应(JSON.stringify({继续:错误,错误:[{type:"400",消息:res.错误}]},{headers:{'Content Type':'application/json'}})现在是过渡过程中最漂亮的部分:删除无用的配置。我们的Express服务器被设置为将应用程序导出为模块插入凭据,以便Heroku或任何非服务器服务器服务器可以启动、运行和构建。虽然我可以通过webpack为工人导入库,但对于这个应用程序来说,它是不合理的。此外,我还可以访问fetch和其他本地服务工作者函数。const{getJson}=require('simple-fetch')模块.导出=功能设置路由(app){除去模块和部署配置,我删除了文件:Procfile,凭证.json, 包.json, 开发.js, heroku.js公司,并创建-app.js.路线.js只是变成工人.js.这是一个演示如何让我的程序员生活更轻松。将来使用我的代码的开发人员可以阅读这些代码,而不必查看任何配置。即使是一个纯粹的普通bean Javascript开发人员也可以加入进来,因为它不需要管理构建和拉毛出去。带着我现在可以花时间做我喜欢的事情——发展。