podium layout 说明
layout 主要是进行podlets 的组合,同时也提供了context ,fallback,以及传递参数的处理
基本代码
const express = require('express');
const Layout = require('@podium/layout');
const app = express();
const layout = new Layout({
name: 'myLayout',
pathname: '/demo',
});
const podlet = layout.client.register({
name: 'myPodlet',
uri: 'http://localhost:7100/manifest.json',
});
app.use(layout.middleware());
app.get('/demo', async (req, res) => {
const incoming = res.locals.podium;
const response = await podlet.fetch(incoming);
incoming.view.title = 'My Super Page';
res.podiumSend(`<div>${response}</div>`);
});
app.listen(7000);
context
- 自定义context
比如进行header 的处理,对于不同规则传递不同后端
const CustomContext = require('my-custom-context-parser');
...
// Register custom context with layout
layout.context.register('my-custom-context', new CustomContext());
处理podlet 不可用
- 超时定义
const layout = new Layout({
...
client: {
timeout: 2000,
}
});
- 异常处理
const gettingStarted = layout.client.register({
...
throwable: true,
})
依赖拦截处理
app.get('/', (req, res, next) => {
try {
const content = await gettingStarted.fetch(res.locals.podium);
...
} catch(err) {
// you might handle this directly...
// res.status(500).send('The getting started guide is currently unavailable');
// or perhaps just pass the error on to be handled in error handling middleware
// next(err);
}
});
查询参数传递
- 传递查询参数
const content = await Promise.all([
searchField.fetch(incoming, { query: { search: req.query.search } }),
searchResults.fetch(incoming, { query: { search: req.query.search } }),
]);
- 传递pathname
layout 端:
const content = podlet.fetch(incoming, { pathname: '/andrew' });
podlet 端:
app.get('/:name', (req, res) => {
// req.params.name => andrew
});
说明如果content 路由不是/ 而是/content 的需要参考如下修改:
const podlet = new Podlet({
content: '/content',
});
app.get('/content/:name', (req, res) => {
// req.params.name => andrew
});
资源处理
资源主要是css 以及js 文件,以下为几种处理方式
- podlet 基于暴露的api 提供css 以及js 的
podlet.js({ value: `http://my-podlet.com/assets/scripts.js` });
podlet.css({ value: `http://my-podlet.com/assets/styles.js` });
- 通过express 提供资源处理
实际上这种不对于资源的处理需要的layout 端的
app.use('/assets', express.static('assets'));
- podiumSend 以及文档模版自己编写资源处理
app.get('/', (req, res) => {
res.podiumSend(`<div>Content goes here</div>`);
});
- 通过cdn 提供资源服务
这种适合有资源的情况,一般是偏大的项目
关于本地开发模式的配置
- 使用forever提升开发体验
运行方式:
forever start /path/to/development.json
json 配置文件(主要是关于podlet 以及layout 服务)
参考格式:
[
{
"uid": "header",
"append": true,
"watch": true,
"script": "index.js",
"sourceDir": "/path/to/podlets/header"
},
{
"uid": "navigation",
"append": true,
"watch": true,
"script": "index.js",
"sourceDir": "/path/to/podlets/navigation"
},
{
"uid": "home",
"append": true,
"watch": true,
"script": "index.js",
"sourceDir": "/path/to/podlets/home"
},
{
"uid": "footer",
"append": true,
"watch": true,
"script": "index.js",
"sourceDir": "/path/to/podlets/footer"
},
{
"uid": "homePage",
"append": true,
"watch": true,
"script": "index.js",
"sourceDir": "/path/to/layouts/home"
}
]
- 使用pm2
类似的工具,pm2 做为实际项目的运行工具是一个很不错的选择
参考资料
https://podium-lib.io/docs/layout/getting_started
https://podium-lib.io/docs/api/document
https://github.com/rongfengliang/podium-docker-compose
podium layout 说明的更多相关文章
- podium micro-frontends 简单试用
以下是一个简单的podium 试用,包含了layout 以及podlets,使用docker 运行 podium 主要包含了两大部分 podlets 片段服务 layouts 片段组合服务 环境准备 ...
- podium服务器端的微前端开发框架
podium 是一个比较全的微前端开发框架. 具有以下特性 自治开发 强大的组合能力 基于约定的开发模式 podium 包含的组件 podlets 页面片段,是一个独立的http 服务,独立运行的,实 ...
- podium podlets 说明
podlets 提供了一个页面片段服务,podlets 包含了一些元数据信息,通过json 暴露, 主要包含以下内容 一个 http endpoint 提供主要内容 一个 http endpoint ...
- 前端框架 EasyUI (2)页面布局 Layout
在 Web 程序中,页面布局对应用程序的用户体验至关重要. 在一般的信息管理类的 Web 应用程序中,页面结构通常有一个主工作区,然后在工作区上下左右靠近边界的区域设置一些边栏,用于显示信息或放置一些 ...
- Android Studio分类整理res/Layout中的布局文件(创建子目录)
res/layout中的布局文件太杂,没有层次感,受不了的我治好想办法解决这个问题. 前几天看博客说可以使用插件分组,可惜我没找到.知道看到另一篇博客时,才知道这个方法不能用了. 不能用插件,那就手动 ...
- 如何在ASP.NET Web站点中统一页面布局[Creating a Consistent Layout in ASP.NET Web Pages(Razor) Sites]
如何在ASP.NET Web站点中统一页面布局[Creating a Consistent Layout in ASP.NET Web Pages(Razor) Sites] 一.布局页面介绍[Abo ...
- [Android]异步 layout inflation(翻译)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5829809.html 异步 layout inflation ...
- Express 4 handlebars 不使用layout写法
Express 4 handlebars 不使用layout写法 Express node nodejs handlebars layout 最近刚开始学习使用nodejs. 使用express搭建了 ...
- Android在layout xml中使用include
Android include与merge标签使用详解 - shuqiaoniu的博客 - 博客频道 - CSDN.NEThttp://blog.csdn.net/shuqiaoniu/article ...
随机推荐
- Gridview中的编辑模板与项模板的用法
<asp:GridView ID="GridView1" AutoGenerateColumns="false" runat="server&q ...
- Oracle排序(中文)
一.中文排序 1. 按照笔划排序 select * from dept order by nlssort(name,'NLS_SORT=SCHINESE_STROKE_M'); ...
- php 计算文件大小
计算文件大小 主要计算文件的 size 大小,默认的为Bytes的,所以运用三元运算符,来进行转换. 转换成 Bytes->KB->MB->GB /** * @param $size ...
- selenium中元素操作之上传操作(六)
上传操作分为两种情况: 1.input标签上传 如果是input可以直接输入路径的,那么直接调用send_keys输入路径,和前边的元素操作类似,在这里不再过多的赘述. 2.非input标签上传 非i ...
- jsp,servlet文件上传问题完善
1. 上传文件时文件名中文乱码 upload.setHeaderEncoding("utf-8"); 有个疑惑: 不管设置不设置都不乱码,但是刘帅龙老师讲的时候出现了乱码 . 2. ...
- 如何在Linux中复制文档
在办公室里复印文档过去需要专门的员工与机器.如今,复制是电脑用户无需多加思考的任务.在电脑里复制数据是如此微不足道的事,以致于你还没有意识到复制就发生了,例如当拖动文档到外部硬盘的时候. 数字实体复制 ...
- Windows中常用工具
护眼软件 f.lux https://justgetflux.com/ Typora https://www.typora.io/ Markdown工具,小巧,方便. Snipaste https:/ ...
- 【转】Webpack 快速上手(中)
由于文章篇幅较长,为了更好的阅读体验,本文分为上.中.下三篇: 上篇介绍了什么是 webpack,为什么需要 webpack,webpack 的文件输入和输出 中篇介绍了 webpack 在输入和输出 ...
- 8.Javascript-map、reduce、filter 等高阶函数
高阶函数 高阶函数是对其他函数进行操作的函数,可以将它们作为参数或通过返回它们.简单来说,高阶函数是一个函数,它接收函数作为参数或将函数作为输出返回. 例如Array.prototype.map,Ar ...
- IOS之NSString NSData char 相互转换
转自:http://blog.csdn.net/xialibing103/article/details/8513312 1.NSString转化为UNICODE String:(NSString*) ...