webpack-dev-server (devServer) 不接收来自 axios 的 json 数据 (payload) | req.query & req.params 为空

问题描述

我有一个类似的 webpack-dev-server 配置

void MainWindow::getJsonData(QNetworkAccessManager *mNetworkManager) {
    const QUrl json("https://www.seismicportal.eu/fdsnws/event/1/query?limit=100&format=json");
    qnetworkrequest *mNetworkRequest = new qnetworkrequest;
    mNetworkRequest->setUrl(json);
    mNetworkRequest->setRawHeader("Content-Type","application/json");
    mNetworkRequest->setRawHeader("Accept","application/json");

    QNetworkReply *mNetworkReply = mNetworkManager->get(*mNetworkRequest);
    QString replyString = (QString) mNetworkReply->readAll();

    QJsonDocument document = QJsonDocument::fromJson(replyString.toUtf8());
    QJsonObject object = document.object();
    QJsonValue type = object["type"].toString();
    QJsonArray featuresArray = object["features"].toArray();

    qDebug() << type;
    qDebug() << featuresArray;
}

等价的 axios 调用就像

const path = require('path')
const Circularjson = require('circular-json') //just to allow me to log circular references

module.exports = {
...
  devServer: {
    before(app) {
      app.all('/my/route',(req,res) => {
        console.log(Circularjson.stringify(req))//req.query & req.params are empty {}
        
        // I wanna have access to sent payload from Axios here,eg:
        const result = {
          foo1: req.query.bar1,foo2: req.query.bar2
        }
        res.writeHead(200,{ 'Content-Type': 'application/json' });
        res.end(JSON.stringify(result));
      });
    }
  }
}

我能够到达路线,因为我得到了 axios.post('/my/route',{bar1: 'x',bar2: 'y'}).then(...) => {...}) 输出,但 console.log(Circularjson.stringify(req))req.query 是空的。我怀疑这是因为我正在发送 JSON 数据,但即使使用额外的 axios 配置 req.params 我也无法获得我想要发送的数据。

有什么想法吗?

解决方法

解决方案是使用'body-parser'

const path = require('path')
const CircularJSON = require('circular-json') //just to allow me to log circular references
const bodyParser = require('body-parser')

module.exports = {
...
  devServer: {
    before(app) {
      // use bodyParser for axios request
      app.use(bodyParser.urlencoded({ extended: true }))
      app.use(bodyParser.json())

      app.all('/my/route',(req,res) => {
        console.log(CircularJSON.stringify(req))//req.query & req.params are empty {}
        
        // access them on req.body:
        const result = {
          foo1: req.body.bar1,foo2: req.body.bar2
        }
        res.writeHead(200,{ 'Content-Type': 'application/json' });
        res.end(JSON.stringify(result));
      });
    }
  }
}