Получение содержимого тела из запроса в node-mitm
У меня есть следующее node-mitm
код.
mitm = Mitm();
mitm.on("request", function(req, res) {
const body = req.body; //body is null
})
Я чувствую, что это связано с чтением узла IncomingMessage
события, но я не знаю, как это сделать.
1 ответ
Mitm.js-х request
handler такой же, как тот, к которому вы привыкли на стороне Node. То есть он не делает ничего особенного с req.body
и оставляет это как ReadableStream
,
Вы можете получить его содержимое с классическим on("data")
шаблон:
mitm.on("request", function(req, res) {
req.on("data", function(data) { data == "Hello" })
})
Если вы хотите подделать более крупный сервис, я иногда использовал Express для создания маршрутов, а затем передавал обработчик маршрутов Express в Mitm:
var Router = require("express").Router
var router = Router().use(require("body-parser").text())
router.get("/", function(req, res) { req.end() })
mitm.on("request", route.bind(null, router))
function route(router, req, res) {
router(req, res, function(err) {
if (err == null) return
res.writeHead(502)
throw err
})
}
Последний пример - это краткое изложение паттерна, который я также получил в открытом доступе в репозитории Rahvaalgatus с открытым исходным кодом: https://github.com/rahvaalgatus/rahvaalgatus.
В частности, посмотрите на тестовый контроллер https://github.com/rahvaalgatus/rahvaalgatus/blob/6dc91b026d75879cdc552bd2e63f220235b786c0/test/controllers/home_controller_test.js и посмотрите this.router
определение по адресу https://github.com/rahvaalgatus/rahvaalgatus/blob/6dc91b026d75879cdc552bd2e63f220235b786c0/test/mitm.js.