@banzaicloud/service-tools

中文文档
4.0.6发布于 2021/07/07Apache-2.0TypeScriptCommonJS近 30 天下载 3081

常见案例的节点服务工具

中文使用文档
文档目录6 节
  1. 安装
  2. 用法实例( E)
  3. 主要出口
  4. 配置
  5. 中间软件( Koa)
  6. 中间软件( Express)

节点服务工具

准备你的Node.js生产申请!

此库提供常见的功能, 如优雅的错误处理和关闭, 结构化的 JSON 记录和几个 HTTP 中间软件, 使您的应用程序真正为现代的容器化环境做好准备, 如 库伯涅斯。 。 。 .

安装

npm i @banzaicloud/service-tools
# or
yarn add @banzaicloud/service-tools

用法实例( E)

此库以TypeScript来写出,指被公布的类型或源代码用于参数和返回类型.

有实例可供查阅 快递 财务报告和审定财务报表 科亚 框架。 看看这个 实例 文件夹!

主要出口

catchErrors(options)

抓住未被发现的例外 和未处理的承诺拒绝。 之后恢复正常运行不安全 无法排除。 。 。 .

const { catchErrors } = require('@banzaicloud/service-tools')

// ...

// the handlers return a Promise
// the handlers are called in order
catchErrors([closeServer, closeDB])

// the error will be caught and the handlers will be called before exiting
throw new Error()

gracefulShutdown(handlers, options)

优雅关闭: 退出前释放资源( 数据库, HTTP 连接,...) 。 申请收到时 SIGTERM 或者说 SIGINT 信号,将调用近接器。 处理者应返回 a Promise。 。 。 .

const { gracefulShutdown } = require('@banzaicloud/service-tools')

// ...

// the handlers return a Promise
// the handlers are called in order
gracefulShutdown([closeServer, closeDB])

logger

A 类 皮诺 结构化 JSON 日志实例配置 config.pino。 。 。 .

const { logger } = require('@banzaicloud/service-tools')

logger.info({ metadata: true }, 'log message')
// > {"level":30,"time":<ts>,"msg":"log message","pid":0,"hostname":"local","metadata":true,"v":1}
使用已提供的日志而不是 console

全球覆盖 console 并使用库提供的日志打印信件.

const { logger } = require('@banzaicloud/service-tools')

console.log('log message')
// > log message

logger.interceptConsole()

console.log('log message')
// > {"level":30,"time":<ts>,"msg":"log message","pid":0,"hostname":"local","v":1}

配置

动态装入配置 .

config.environment

使用 NODE_ENV 环境变量,具有以下公认的价值:生产、开发、测试.

const { config } = require('@banzaicloud/service-tools')
// validates the NODE_ENV environment variable
console.log(config.environment)
// > { nodeEnv: 'production' }

config.pino

被提供方使用 日志使用 LOGGER_LEVEL 财务报告和审定财务报表 LOGGER_REDACT_FIELDS 环境变量。 这个 LOGGER_LEVEL 可以是以下之一:致命,错误,警告,信息,调试,追踪. LOGGER_REDACT_FIELDS 是一个逗号分隔的字段名称列表,以遮盖输出(默认为: 'password, pass, authorization, auth, cookie, _object') (中文(简体) ).

const pino = require('pino')
const { config } = require('@banzaicloud/service-tools')

const logger = pino(config.pino)

logger.info({ metadata: true, password: 'secret' }, 'log message')
// > {"level":30,"time":<ts>,"msg":"log message","pid":0,"hostname":"local","metadata":true,"password":"[REDACTED]","v":1}

中间软件( Koa)

数个中间软件 科亚 网络框架.

errorHandler(options)

Koa 错误处理器中间软件 .

const Koa = require('koa')
const { koa: middleware } = require('@banzaicloud/service-tools').middleware

const app = new Koa()

// this should be the first middleware
app.use(middleware.errorHandler())

healthCheck(checks, options)

科阿健康检查端点操作员.

const Koa = require('koa')
const Router = require('koa-router')
const { koa: middleware } = require('@banzaicloud/service-tools').middleware

// ...

const app = new Koa()
const router = new Router()

// the checks return a Promise
router.get('/health', middleware.healthCheck([checkDB]))

app.use(router.routes())
app.use(router.allowedMethods())

prometheusMetrics(options)

科亚 普罗米修斯 测量端点处理器。 默认它收集一些 默认参数。 。 。 .

const Koa = require('koa')
const Router = require('koa-router')
const { koa: middleware } = require('@banzaicloud/service-tools').middleware

// ...

const app = new Koa()
const router = new Router()

router.get('/metrics', middleware.prometheusMetrics())

app.use(router.routes())
app.use(router.allowedMethods())

requestValidator(options)

Koa 请求验证器中间软件 。 接受 乔 计划 body (身体解析器要求), params 财务报告和审定财务报表 query (需要排队). 以 400 如果请求无效。 指定验证值为 ctx.state.validated。 。 。 .

const joi = require('joi')
const qs = require('qs')
const Koa = require('koa')
const Router = require('koa-router')
const bodyParser = require('koa-bodyparser')
const { koa: middleware } = require('@banzaicloud/service-tools').middleware

// ...

const app = new Koa()
const router = new Router()

const paramsSchema = joi
  .object({
    id: joi
      .string()
      .hex()
      .length(64)
      .required(),
  })
  .required()

const bodySchema = joi.object({ name: joi.string().required() }).required()

const querySchema = joi.object({ include: joi.array().default([]) }).required()

router.get(
  '/',
  middleware.requestValidator({ params: paramsSchema, body: bodySchema, query: querySchema }),
  async function routeHandler(ctx) {
    const { params, body, query } = ctx.state.validated
    // ...
  }
)

app.use(bodyParser())
// query parser
app.use(async function parseQuery(ctx, next) {
  ctx.query = qs.parse(ctx.querystring, options)
  ctx.request.query = ctx.query
  await next()
})
app.use(router.routes())
app.use(router.allowedMethods())

requestLogger(options)

Koa 请求日志中间软件 。 用于本地开发与调试.

const Koa = require('koa')
const { koa: middleware } = require('@banzaicloud/service-tools').middleware

// ...

const app = new Koa()

// this should be the second middleware after the error handler
// ...
app.use(middleware.requestLogger())

中间软件( Express)

数个中间软件 快递 网络框架.

errorHandler(options)

快捷错误处理器中间软件 .

const express = require('express')
const { express: middleware } = require('@banzaicloud/service-tools').middleware

const app = express()

// this should be the last middleware
app.use(middleware.errorHandler())

healthCheck(checks, options)

快递健康检查端点处理器.

const express = require('express')
const { express: middleware } = require('@banzaicloud/service-tools').middleware

// ...

const app = express()

// the checks return a Promise
app.get('/health', middleware.healthCheck([checkDB]))

prometheusMetrics(options)

快递 普罗米修斯 测量端点处理器。 默认它收集一些 默认参数。 。 。 .

const express = require('express')
const { express: middleware } = require('@banzaicloud/service-tools').middleware

// ...

const app = express()

app.get('/metrics', middleware.prometheusMetrics())

requestValidator(options)

Express 请求验证器中间软件. 接受 乔 计划 body (身体解析器要求), params 财务报告和审定财务报表 query返回时使用 400 如果请求无效。 指定验证值为 req。 。 。 .

const joi = require('joi')
const express = require('express')
const { express: middleware } = require('@banzaicloud/service-tools').middleware

// ...

const app = express()

const paramsSchema = joi
  .object({
    id: joi
      .string()
      .hex()
      .length(64)
      .required(),
  })
  .required()

const bodySchema = joi.object({ name: joi.string().required() }).required()

const querySchema = joi.object({ include: joi.array().default([]) }).required()

app.use(express.json())
app.get(
  '/',
  middleware.requestValidator({ params: paramsSchema, body: bodySchema, query: querySchema }),
  function routeHandler(req, res) {
    const { params, body, query } = req
    // ...
  }
)

版本与发布记录

@banzaicloud/service-tools 共发布 49 个版本,首次发布于 2018/08/03;过去 12 个月发布了 0 个版本。

版本发布日期距今
4.0.6latest2021/07/075 年前
4.0.52021/07/075 年前
4.0.42020/07/166 年前
4.0.32020/04/146 年前
4.0.22020/03/176 年前
4.0.02019/11/126 年前

其他发布通道:beta → 4.0.0-beta.0。

关于 @banzaicloud/service-tools 的常见问题

@banzaicloud/service-tools 是什么?

常见案例的节点服务工具

如何安装 @banzaicloud/service-tools?

在项目目录运行 npm install @banzaicloud/service-tools,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:koa(>=2.5.2 < 3.0.0)、express(>=4.16.3 < 5.0.0)、@hapi/hapi(>=19.0.0 < 20.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@banzaicloud/service-tools 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@banzaicloud/service-tools 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@banzaicloud/service-tools 可以商用吗?

@banzaicloud/service-tools 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@banzaicloud/service-tools 的下载量有多少?

根据 npm 官方下载统计,@banzaicloud/service-tools 在 2026/10/08 – 2026/11/06 这 30 天内被下载 3,081 次,日均约 103 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@banzaicloud/service-tools 还在维护吗?

最新版本 4.0.6 发布于 2021/07/07(5 年前);至今共发布 49 个版本,其中过去 12 个月发布了 0 个;首次发布于 2018/08/03。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。