如何将嵌套参数发送到 axios 并在服务器上接收

How to send nested params to axios and receive on server

如何将嵌套的参数对象发送到 axios 并在服务器端接收它们?

const params = JSON.stringify({
  sizes: {
    thumb: [400, 400],
    banner: [1280, 400],
  },
});
const res = await api({
  method: "POST",
  url: "http://localhost:3000/v1/api/create",
  params: params,
});

在我的快递服务器上

create.js

module.exports = async function (req, res) {
...
console.log(req.query)
console.log(JSON.parse(req.query))
}

不过我遇到了错误

{ '0': '{"sizes":{"thumb":[400,400],"banner":[1280,400]}}' }
SyntaxError: Unexpected token o in JSON at position 1
    at JSON.parse (<anonymous>)

我是传递还是接收错误?

req.query

的控制台打印
...
{ '0': '{"sizes":{"thumb":[400,400],"banner":[1280,400]}}' }
...

看起来 req.query 已经是一个对象,这就是 JSON.parse 失败的原因。 req.query 的 '0' 属性 是您的字符串化对象。这就是您要解析的部分。

let object = JSON.parse(req.query['0']);

现在对象将是

{
  sizes: {
    thumb: [400, 400],
    banner: [1280, 400],
  }
}

我认为正在发生的事情是您的前端和服务器正在以不同方式序列化和 de-serializing 嵌套查询。

使用相同的serialization/de-serialzation函数即可解决问题。

下面是 "qs" library 的示例:

前端:

const qs = require('qs')

// don't stringify it, let the library do it for you
const params = {
  sizes: {
    thumb: [400, 400],
    banner: [1280, 400],
  },
};
const res = await api({
  method: "POST",
  url: "http://localhost:3000/v1/api/create",
  params: params,
  paramsSerializer: qs.stringify
})

服务器:

const express = require('express')
const qs = require('qs')

// be sure to define this first
app.set('query parser', str => qs.parse(str))

// then define your routes
app.get("/", (req, res) => console.log(req.query))