Получение содержимого тела из запроса в 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.

Другие вопросы по тегам