@nohost/router
v1.1.0
Published
Nohost cluster router
Downloads
21
Readme
router
以下需要使用最新版的 nohost:https://github.com/nohosts/nohost
nohost 集群部署时,用来分发请求到各个节点的路由器。
安装
npm i --save @nohost/router
使用
const Router = require('@nohost/router');
const {
SPACE_NAME,
GROUP_NAME,
ENV_NAME,
NOHOST_RULE,
NOHOST_VALUE,
CLIENT_ID,
CLIENT_ID_FILTER,
writeHead,
writeError,
} = Router;
// 初始化传人部署的 nohost 服务器列表
const router = new Router([
{
host: '10.11.12.13',
port: 8080
},
...
]);
// 更新服务器列表
// 支持http、websocket、tunnel
try {
const svrRes = await router.proxy(req, res);
writeHead(res, svrRes);
svrRes.pipe(res);
} catch (err) {
writeError(res, err);
}
// 查看抓包请求
router.proxyUI(req, res);
更新服务器列表
router.update([
{
host: '10.11.12.13',
port: 8080
},
{
host: '10.31.32.33',
port: 8080
},
...
]);
router 每 12s 会检测一遍所有服务,并剔除不可用的
转发正常请求
const getOptions = (req) => {
const { headers } = req;
const spaceName = 'imweb';
let gruopName;
let envName;
if (headers.host === 'km.oa2.com') {
gruopName = 'avenwu';
envName = '测试'; // 可选
} else if (req.headers.host !== 'km.oa.com') {
gruopName = 'avenwu2';
envName = '测试2'; // 可选
}
return {
rules: 'file://{test.html} km.oa2.com www.test2.com',
values: { 'test.html': 'hell world.' },
spaceName,
gruopName,
envName,
callback: console.log, // 可选
// clientId: 'test', // 如果从外网转发过来的带登录态请求,设置下 clientId 方便插件当前用户的请求抓包
};
};
router.proxy(req, res, getOptions(req));
// 或自己处理响应
// const svrRes = await router.proxy(req);
查看抓包数据
router.proxyUI(req, res, getOptions(req));
只转发到指定 Nohost 服务
const Router = require('@nohost/router');
const router = new Router({
host: '10.x.x.x',
port: 8080,
});
router.proxy(req, res); // 同测试用例,无需设置 space / group,env 按需设置
router.proxyUI(req, res); // 同测试用例,无需设置 space / group,env 按需设置
具体实现参考:测试用例