node在物流的应用

305 阅读2分钟

背景

期望通过api统一生成图片对内对外,但是java生成图片在热敏打印机中 打印出来文字不清晰

应用方案

采取node+koa2+puppeteer生成图片返回给java

koa2

Koa.js 是一个极其精简的 Web 服务框架,主要提供以下功能:

  • HTTP 服务:主要处理 request 和 response

  • 中间件数据处理机制(洋葱模型) 洋葱模型其实就是中间件处理的流程,中间件生命周期大致有:

  • 前期处理

  • 交给并等待其它中间件处理

  • 后期处理

多个中间件处理,就形成了所谓的洋葱模型,它是 AOP 面向切面编程的一种应用。

一张经典的洋葱切面图如下:

image.png

koa2环境搭建

  • 全局安装脚手架 npm install -g koa-generator

  • 创建项目 koa2 【项目名】

  • 启动项目 npm run dev

  • 访问 localhost:3000

koa路由使用方式

- 创建路由
     const router = require('koa-router')()
     router.get('/htmlToImg', async (ctx, next) => { })
- main.js 引入并注册路由
     const index = require('./routes/index')
     routes app.use(index.routes(), index.allowedMethods())

puppeteer

Puppeteer 是一个 Node 库,它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome,利用Puppeteer可以获取页面DOM节点、网络请求和响应、程序化操作页面行为、进行页面的性能监控和优化、获取页面截图和PDF等,利用该神器就可以操作Chrome浏览器玩出各种花样。

截图处理过程

1. 创建一个 Browser 对象

const browser = await puppeteer.launch()

2. 打开新页面

const page = await browser.newPage()

3. 导航地址url

await page.goto(url,options)

导航到的地址. 地址应该带有http协议, 比如 https://.
options:{timeout,waitUntil}
   timeout 跳转等待时间,单位是毫秒, 默认是30秒, 传 0 表示无限等待. 
可以通过page.setDefaultNavigationTimeout(timeout)方法修改默认值

   waitUntil <string|Array> 满足什么条件认为页面跳转完成,默认是 load 事件触发时。
指定事件数组,那么所有事件触发后才认为是跳转完成。事件包括:
   load - 页面的load事件触发时
   domcontentloaded - 页面的 DOMContentLoaded 事件触发时
   networkidle0 - 不再有网络连接时触发(至少500毫秒后)
   networkidle2 - 只有2个网络连接时触发(至少500毫秒后)

4. 页面指定区域进行截图

const imgdata = await page.screenshot({
    path: 'example.png', 
    clip: {
      x: 0,
      y: 0,
      width: 740,
      height: 856,
    },
    encoding: 'base64'
  });
imgdata返回给接口

5. 关闭 Chromium 及其所有页面(如果页面被打开的话)

await page.close();

await browser.close()