Week5 - 每次在Server上debug头都很大吗?用神奇的CURL来重现问题吧! [Server的终局之战系列]

这几天在与APP伙伴们整合测试时,我一直都是最拖的那个,因为我从头到尾都在把log的资讯copy paste至postman,这实在很恼人,所以后来想想

是否可以把APP or 前端发过来的这些requests log做成CURL,让他可以直接贴在我的postman呢?

于是就做了此套件generate-curl,大家可以下载安装,并交换意见,指教了~


在后端收到requests时,常常需要将这些requests参数複製下来至postman或者insomnia重组,这十分的麻烦,generate-curl提供将requests转换成curl的功能,让后端人员可以使用此curl直接转换至postman, insomnia, terminal来debug,另外,generate-curl也提供函数来让重要资讯隐藏。

安装

npm install generate-curl

如何使用

对于express.js server

express.js可直接使用

const express = require('express')const bodyParser = require('body-parser')const curl = require('generate-curl').curl()const { utils: curlUtils } = require('generate-curl')const app = express();const upload = require('multer')()app.use(bodyParser.urlencoded({ extended: false }))app.use(bodyParser.json())app.use('/monitor', upload.none(), function(req, res) {  const option = {    headers: {      '$["authorization"]': curlUtils.hide()    }  }  console.log(curl(req, option))  // curl -d '{"data":"12345"}' -H "host: localhost:3003" -H "content-type: application/json" -H "authorization: hide" -X POST 'http://localhost:3003/monitor?query=abc'  res.send('ok')})app.listen(3003, function () {  console.log('3003');})

对于其他node.js server

只需在初始化generate-curl时设置不同框架的req所对应至express的参数即可

const curl = require('generate-curl').curl(req => {  protocol: req.protocol,  baseUrl: req.baseUrl,  headers: req.headers,  method: req.method,  body: req.body,  query: req.query,  get (host) {    return req.get(host)  }})

比如koa的ctx.path对应到express的req.baseUrl,所以须对应两者

const Koa = require('koa')const bodyParser = require('koa-bodyparser');const curl = require('generate-curl').curl(ctx => {  return {    baseUrl: ctx.path  }})const app = new Koa();app.use(bodyParser());app.use( async ( ctx ) => {  ctx.body = ctx.request.body  console.log(curl(ctx))})app.listen(3000, () => {  console.log('request get is starting at port 3000')})

目前支援content-type

application/jsonapplication/x-www-form-urlencodedmultipart/form-data //对req.file不支援

提供的utils function

当有敏感资讯不想显示出来时,可以使用option对此做调整,例如authorization不想显示时,可使用hide隐藏,目前有以下特性:

使用jsonPath来对应路径,可以使用jsonPath的语法来对应複杂的巢状jsonutils.hide(): 隐藏valueutils.hash(): 杂凑valueutils.slice(start, end): 切割字串可自订处理function

例子

const option = {  headers: {    '$["authorization"]': curlUtils.hide(),// authorization会被隐藏,即 authorization: hide    '$["userId"]': curlUtils.hash(),// userId会被hash,即 hashuserId: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08    '$["uuid"]': curlUtils.slice(0, 3)// uuid会被字串切割,即 uuid: 123  }  body: {    '$..name': value => `${value}1234`// 在body里的name会被自订fucntion处理,此处即加上1234字串  }}console.log(curl(req, option))

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章