這幾天在與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可直接使用
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');
})
只需在初始化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')
})
當有敏感資訊不想顯示出來時,可以使用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))