Socket
Socket
Sign inDemoInstall

@nohost/router

Package Overview
Dependencies
2
Maintainers
1
Versions
20
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    @nohost/router

Nohost cluster router


Version published
Weekly downloads
3
decreased by-25%
Maintainers
1
Created
Weekly downloads
 

Readme

Source

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 按需设置

具体实现参考:测试用例

Keywords

FAQs

Last updated on 01 Jan 2022

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc