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 说明的更多相关文章

  1. podium micro-frontends 简单试用

    以下是一个简单的podium 试用,包含了layout 以及podlets,使用docker 运行 podium 主要包含了两大部分 podlets 片段服务 layouts 片段组合服务 环境准备 ...

  2. podium服务器端的微前端开发框架

    podium 是一个比较全的微前端开发框架. 具有以下特性 自治开发 强大的组合能力 基于约定的开发模式 podium 包含的组件 podlets 页面片段,是一个独立的http 服务,独立运行的,实 ...

  3. podium podlets 说明

    podlets 提供了一个页面片段服务,podlets 包含了一些元数据信息,通过json 暴露, 主要包含以下内容 一个 http endpoint 提供主要内容 一个 http endpoint ...

  4. 前端框架 EasyUI (2)页面布局 Layout

    在 Web 程序中,页面布局对应用程序的用户体验至关重要. 在一般的信息管理类的 Web 应用程序中,页面结构通常有一个主工作区,然后在工作区上下左右靠近边界的区域设置一些边栏,用于显示信息或放置一些 ...

  5. Android Studio分类整理res/Layout中的布局文件(创建子目录)

    res/layout中的布局文件太杂,没有层次感,受不了的我治好想办法解决这个问题. 前几天看博客说可以使用插件分组,可惜我没找到.知道看到另一篇博客时,才知道这个方法不能用了. 不能用插件,那就手动 ...

  6. 如何在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 ...

  7. [Android]异步 layout inflation(翻译)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5829809.html 异步 layout inflation ...

  8. Express 4 handlebars 不使用layout写法

    Express 4 handlebars 不使用layout写法 Express node nodejs handlebars layout 最近刚开始学习使用nodejs. 使用express搭建了 ...

  9. Android在layout xml中使用include

    Android include与merge标签使用详解 - shuqiaoniu的博客 - 博客频道 - CSDN.NEThttp://blog.csdn.net/shuqiaoniu/article ...

随机推荐

  1. WebApi验证

    如何实现RESTful Web API的身份验证   最近想拿一个小项目来试水RESTful Web API,项目只有几个调用,比较简单,但同样需要身份验证,如果是传统的网站的话,那不用说,肯定是用户 ...

  2. Python基础6

    <零基础入门学习python>,小甲鱼. P33. 用for循环和range() 配合求数列和,对比while循环,简洁很多

  3. 从 Vue 的视角学 React(二)—— 基本语法

    基于 Vue.js 开发的时候,每个 vue 文件都是一个单独的组件,可以包含 HTML,JS,CSS 而 React 是以函数为基础,每个 function 就是一个组件.虽然 JSX 让 HTML ...

  4. DataPipeline丨LinkedIn元数据之旅的最新进展—Data Hub

    作者:Mars Lan, Seyi Adebajo, Shirshanka Das 译者: DataPiepline yaran 作为全球最大的职场社交平台,LinkedIn的数据团队不断致力于扩展其 ...

  5. 线下AWD平台搭建以及一些相关问题解决

    线下AWD平台搭建以及一些相关问题解决 一.前言 文章首发于tools,因为发现了一些新问题但是没法改,所以在博客进行补充. 因为很多人可能没有机会参加线下的AWD比赛,导致缺乏这方面经验,比如我参加 ...

  6. Kafka Streams开发入门(1)

    背景 最近发现Confluent公司在官网上发布了Kafka Streams教程,共有10节课,每节课给出了Kafka Streams的一个功能介绍.这个系列教程对于我们了解Kafka Streams ...

  7. 2015年br运维操作归档

    归档2015年在br做运维时常用的命令,主要梳理出log的过滤操作. 对于日志文本的处理,常见还是sed和awk,具体如下: 统计ip访问量: cat nginx.log |awk '{print $ ...

  8. 大数据:Hadoop(JDK安装、HDFS伪分布式环境搭建、HDFS 的shell操作)

    所有的内容都来源与 Hadoop 官方文档 一.Hadoop 伪分布式安装步骤 1)JDK安装 解压:tar -zxvf jdk-7u79-linux-x64.tar.gz -C ~/app 添加到系 ...

  9. idea 端口被占用

    打开你的DOS命令首先输入 netstat  -ano|findstr  8088   (8088即为被占用的端口号) 再输入taskkill  /pid  7348  /f     (7348即为上 ...

  10. 接口测试“八重天”---RestAssured

    要记住每一个对你好的人,因为他们本可以不那么做. ---久节奏,慢读书 一.什么是RestAssured 偶然在逛帖子的时候发现一个接口测试框架,觉得不错,学习学习. 官方地址:http://rest ...