这几天在与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隐藏,目前有以下特性:
例子
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))