@domoinc/ ryu- proxy
本地的中间软件 Domo 应用程序 发展。 它截取到对 Domo 数据的呼叫/ API 端点和代理向您的 Domo 实例认证的请求, 这样您就可以根据本地 dev 服务器的真实数据进行开发 .
目录
特征
- 多莫API流量:
/data/v{d}, (中文(简体) ),/sql/v{d}, (中文(简体) ),/dql/v{d}, (中文(简体) ),/domo/.../v{d}, (中文(简体) ),/api/... - 滴入快件 / 通过连接中件
proxy.express() - 框架不可知性
proxy.stream(req)用于 Koa, 节点http,快递等. - 处理多段/窗体数据上传( 文件流通过
busboy(中文(简体) ) - 使用 DQL 、 回写或 OAuth 特性的应用程序的 OAuth 访问/更新令牌
- 从您现有的 Domo CLI 登录会话中读取 auth —— 没有额外的配置
- 有类型脚本的船舶
- 无害环境管理一揽子措施
所需资源
- 节点.js 18岁以上
- 活跃的多摩 CLI 会话( O) :
domo login()——见@ryuu - 一个项目
manifest.json至少出版一次的(domo publish(中文(简体) ) - 端点 :
express ^4.17.0 || ^5.0.0(仅在使用时需要)proxy.express()(中文(简体) )
安装
pnpm add -D @domoinc/ryuu-proxy
# or
npm install --save-dev @domoinc/ryuu-proxy
# or
yarn add -D @domoinc/ryuu-proxy
使用量
此库会从您的 Domo CLI 调用上次登录会话 。 如果该会话不再活动或不存在,代理将失效. 在启动您的 dev 服务器前登录 :
domo login
配置
import { Proxy } from '@domoinc/ryuu-proxy';
import manifest from './path/to/app/manifest.json' with { type: 'json' };
const proxy = new Proxy({ manifest });
这个 Proxy 构造器接受一个配置对象 .
需求
manifest- 解析您项目的内容manifest.json。 。 。 .domo publish一定至少运行过一次 所以名单有id。 。 。 .
可选
manifest.proxyId——对于使用DQL,回写,或OAuth的应用程序需要. 如果你不确定, 你可能不需要它。 见 获取代理ID。 。 。 .
与 快递 编号 : 连接
import express from 'express';
const app = express();
app.use(proxy.express());
与其他框架一起
关于其他框架, stream() 返回可读流,您可以返回到您的响应。 它接受标准节点 来信,而大多数框架延伸.
// koa
app.use(async (ctx, next) => {
await proxy
.stream(ctx.req)
.then((data) => (ctx.body = ctx.req.pipe(data)))
.catch(next);
});
// express
app.use((req, res, next) => {
proxy
.stream(req)
.then((stream) => stream.pipe(res))
.catch(() => next());
});
// node http
import http from 'node:http';
const server = http.createServer((req, res) => {
if (req.url === '/') {
loadHomePage(res);
} else {
proxy.stream(req).then((stream) => stream.pipe(res));
}
});
处理错误
忽略错误导致代理失败, 请求返回 404。为了揭露错误,捕获 DomoException 并转发状态 :
// koa
app.use(async (ctx, next) => {
await proxy
.stream(ctx.req)
.then((data) => (ctx.body = ctx.req.pipe(data)))
.catch((err) => {
if (err.name === 'DomoException') {
ctx.status = err.status || err.statusCode || 500;
ctx.body = err;
} else {
next();
}
});
});
// express / connect
app.use((req, res, next) => {
proxy
.stream(req)
.then((stream) => stream.pipe(res))
.catch((err) => {
if (err.name === 'DomoException') {
res.status(err.status || err.statusCode || 500).json(err);
} else {
next();
}
});
});
// node http
const server = http.createServer((req, res) => {
if (req.url === '/') {
loadHomePage();
} else {
proxy
.stream(req)
.then((stream) => stream.pipe(res))
.catch((err) => {
if (err.name === 'DomoException') {
res.writeHead(err.status || err.statusCode || 500);
res.end(JSON.stringify(err));
}
});
}
});
DomoException 形状 :
| 外地 | 说明 |
|---|---|
name | 永远 "DomoException" |
status 编号 : statusCode | HTTP 状态代码 |
statusMessage | 错误描述 |
HTTP 代理支持
如果您坐在公司 HTTP 代理后, 请设置以下环境变量 . REACT_APP_- 前置变体也因Create React App项目而获得荣誉.
| 变量 | 目的 |
|---|---|
PROXY_HOST 编号 : REACT_APP_PROXY_HOST | 代理主机名称 |
PROXY_PORT 编号 : REACT_APP_PROXY_PORT | 代理端口 |
PROXY_USERNAME 编号 : REACT_APP_PROXY_USERNAME | 基本认证用户名( 可选) |
PROXY_PASSWORD 编号 : REACT_APP_PROXY_PASSWORD | 基本验证密码( 可选的) |
获取代理ID( 高级)
使用 DQL 、 回写或 OAuth 特性的应用程序必须提供 proxyId 在代理配置中,这样代理可以正确路由请求。 A 类 proxyId 属于形式 XXXXXXXX-XXXX-4XXX-XXXX-XXXXXXXXXXXX为了找到它:
- 确保应用软件至少发布一次
domo publish。 。 。 . - 从您的应用设计中发布新卡, 或者打开从中创建的现有卡 .
- 右键单击牌并选择 检查元素。 。 。 .
- 寻找
<iframe>包含您的应用程序。 它的URL看起来像//{HASH}.domoapps.prodX.domo.com?userId=...。 。 。 . - 复制中间的散列
//财务报告和审定财务报表.domoapps- 这是你的proxyId。 。 。 .
proxyId给卡片打领带 如果删除从你提取的ID的卡片,则需要从同一应用设计所创造的另一张卡片中取出一个新的.
相关软件包
ryuu——多摩CLI(多摩CLI)domo login, (中文(简体) ),domo publish页:1ryuu-client——基础多摩API客户端
捐款
工作流程
- 创建分支( 例如) .
DOMO-XXXXXX(中文(简体) ) - 作出和作出修改
- 测试——可选地发布用于集成测试的α/β
- 打开拉动请求
- 合并到
master,按住版本并发布到 npm
脚本
| 脚本 | 说明 |
|---|---|
pnpm run build | 编译类型脚本到 dist/ |
pnpm test | 运行测试套件( Vest) |
pnpm run test:watch | 以监视模式运行 vitest |
pnpm run test:coverage | 进行覆盖测试 |
pnpm run format | 使用 Pretier 格式源 |
pnpm run release:production | 构建并发布到 npm |
pnpm run release:beta | 构建和出版 beta 标签 |
pnpm run release:alpha | 构建和出版 alpha 标签 |
版本
这个项目使用 标准版本 由常规承诺确定版本起落.