裁缝是一种布局服务,它使用流从Fragment服务中撰写网页。 O'Reilly在此博客文章的标题中将其描述为“提供中间件的库,您可以将其集成到任何node.js服务器中。”它的部分灵感来自Facebook的Bigpipe,但在电子商务环境中开发。
裁缝的一些功能和好处:
裁缝是Mosaic项目的一部分,该项目旨在帮助开发人员为前端创建微服务。马赛克还包括一个可扩展的HTTP路由器,用于服务组成(Skipper),并具有存储路线(Innkeeper)的相关RESTFUL API;有更多组件正在公开发布。如果您的前端团队正在进行整体对微服务的过渡,则可能会发现裁缝及其可用的兄弟姐妹有益。
如今,微服务获得了很多牵引力。他们允许多个团队彼此独立工作,选择自己的技术堆栈并建立自己的释放周期。不幸的是,前端开发尚未完全利用微服务所提供的好处。建立网站的常见做法仍然是“巨石”:一个消耗多个API的单个前端代码库。
如果我们可以在前端有微服务怎么办?这将使前端开发人员能够与后端同行在同一功能上合作,并独立部署网站的部分 - “片段”,例如标题,产品和页脚。将微服务带到前端需要一个布局服务,该服务由片段组成网站。裁缝是为了解决这一需求而开发的。
开始使用裁缝:
yarn add node-tailor const http = require ( 'http' ) ;
const Tailor = require ( 'node-tailor' ) ;
const tailor = new Tailor ( { /* Options */ } ) ;
const server = http . createServer ( tailor . requestHandler ) ;
server . listen ( process . env . PORT || 8080 ) ; fetchContext(request) - 返回上下文的承诺的函数,这是一个将片段ID映射到片段URL的对象,能够覆盖页面上的片段的URL,默认为Promise.resolve({})fetchTemplate(request, parseTemplate) - 应该获取模板,调用parseTemplate并返回结果的函数。有助于实施自己的方法来检索和缓存模板,例如从S3中。默认实现lib/fetch-template.js从文件系统获取模板templatesPath指定模板在本地存储的路径,默认为/templates/fragmentTag片段标签的名称,默认为fragmenthandledTags一系列自定义标签,检查tests/handle-tag以获取更多信息handleTag(request, tag, options, context) - 接收标签或关闭标签并将其序列化为字符串或返回流filterRequestHeaders(attributes, request) - 过滤传递给片段请求的请求标头lib/filter-headers功能filterResponseHeaders(attributes, headers) - 将给定响应标头的主要片段请求映射到最终响应的功能maxAssetLinks CSS和js尊敬的每个片段的Link标头指令数 - 默认为1requestFragment(filterHeaders)(url, attributes, request) - 将请求的承诺返回片段服务器,检查lib/request-fragment中的默认实现amdLoaderUrl -URL到AMD加载器。我们使用cdnjs的requirej默认pipeInstanceName浏览器窗口中可用于消耗前端挂钩的管道实例名称。pipeAttributes(attributes) - 返回前端钩上可用的最小片段属性集的功能。tracer - 符合Opentracing的示踪剂实现。 Tailor使用Parse5来解析模板,在其中用片段服务器和handledTags handleTag的结果将每个fragmentTag替换为每个FragmentTag。
< html >
< head >
< script type =" fragment " src =" http://assets.domain.com " > </ script >
</ head >
< body >
< fragment src =" http://header.domain.com " > </ fragment >
< fragment src =" http://content.domain.com " primary > </ fragment >
< fragment src =" http://footer.domain.com " async > </ fragment >
</ body >
</ html >id可选的唯一标识符(自动化)src碎片的URLprimary - 表示设置页面响应代码的片段timeout - 毫秒中片段的可选超时(默认为3000)async - 推迟片段直到身体标签的末端public - 以防止量身定制的过滤请求标头从上游到碎片。fallback-src在当前片段的超时/错误的情况下,后备片段的URL允许其他属性并将传递给相关功能(例如,
filterRequestHeaders,filterResponseHeaders等)
片段是HTTP(S)服务器,仅渲染页面的一部分,并设置Link标头以向CSS和JavaScript资源提供URL。检查examples/basic-css-and-js/index.js是否实施草案。
片段的JavaScript是一个AMD模块,该模块导出init函数,将以片段的DOM元素作为参数调用。
即使碎片响应包含“位置”标头,裁缝也不会遵循重定向,这是故意的,因为重定向可以引入不良的延迟。带有属性的片段primary可以重定向,因为它控制页面的状态代码。
注意:有关与AWS的兼容性, Link标头也可以通过x-amz-meta-link传递
默认情况下,传入请求将用于选择模板。
因此,要获取index.html模板,您要转到/index 。
如果您想收听/product/my-product-123以转到product.html模板,则可以将req.url更改为/product 。
默认情况下对每个标头进行过滤,以避免泄漏信息,但是您可以通过将其添加到标头, x-request-host和x-request-uri中给原始URI和主机,然后在片段中读取标题以了解要获取和显示的产品。
http
. createServer ( ( req , res ) => {
req . headers [ 'x-request-uri' ] = req . url
req . url = '/index'
tailor . requestHandler ( req , res ) ;
} )
. listen ( 8080 , function ( ) {
console . log ( 'Tailor server listening on port 8080' ) ;
} ) ;裁缝中的某些概念在特定文档中进行了详细描述。
裁缝可以用opentracing开箱即用。它将在Ingress HTTP请求上获取任何跨度上下文,并将其传播到现有的远程过程调用(RPC)。
当前,只有片段的获取才能提供一些其他详细信息,例如片段标签,属性和一些记录有效载荷,例如错误的堆栈跟踪。
# Get a copy of the repository
git clone https://github.com/zalando/tailor.git
# Change to the folder
cd tailor
# Install dependencies
yarnnode examples/basicnode examples/basic-css-and-jsnode examples/multiple-fragments-with-custom-amdnode examples/fragment-performance在运行特定示例后,请访问http:// localhost:8080/index。
注意:请使用节点版本> 6.0.0运行示例
单页申请示例也可用:
要开始运行基准执行npm run benchmark并等待几秒钟才能查看结果。
请在此处查看贡献指南。