Express API 控制器正在接收空字符串

Express API controller is receiving empty strings

当我向我的 API 发送 post 请求时,正文是单个字符串,API 却接收到一个空字符串。

函数调用(客户端):

 const response = await api.uploadImg("image");

axios 请求(客户端):

const uploadImg = async (image: string) => {
  const response = await axios.post(`${apiBaseURL}/api/image`, image);
  return response.data;
};

路由器(服务器):

import { Router } from "express";
import controller from "../controllers/image";

const router = Router();

router.post("/", controller.upload);

export default router;

控制器(服务器):

import { Request, Response } from "express";

const upload = async (req: Request, res: Response) => {
  res.json(req.body)
};

export default { upload };

发送字符串“image”后得到的响应是:

{image: ''}

令人困惑,因为我有另一条路由成功接收请求主体数据而没有破坏它,但是这条路由(以及我制作的另一条测试路由)总是收到一个空字符串而不是发送的字符串。该路由本来应该接收一个 base64 图像字符串并将其上传到 cloudinary,但当它看起来只是接收一个空字符串时,我将控制器更改为简单的 return 请求主体以进行测试。

完整的快递服务器:

import express from "express";
import morgan from "morgan";
import cors from "cors";
// util
import config from "./config";
import connectMongo from "./config/mongo";
import connectCloudinary from "./config/cloudinary";
// routes
import indexRoutes from "./routes";
import userRoutes from "./routes/user";
import postRoutes from "./routes/post";
import imageRoutes from "./routes/image";

const server = express();

server.listen(config.server.port, () => {
  console.log("Server running on port:", config.server.port);

  // logging when in developement
  if (config.server.env === "developement") server.use(morgan("dev"));

  // parse requests
  server.use(express.urlencoded({ extended: true, limit: "50mb" }));
  server.use(express.json({ limit: "50mb" }));

  // connect the database
  connectMongo();

  // connect cloudinary for image uploads
  connectCloudinary();

  // cross-origin-routing
  server.use(
    cors({
      origin: config.client.url,
    })
  );

  // routing
  server.use("/", indexRoutes);
  server.use("/api/users", userRoutes);
  server.use("/api/posts", postRoutes);
  server.use("/api/image", imageRoutes);
});

link 到 github 后端的回购 here

问题出在 axios 调用中:

const uploadImg = async (image: string) => {
  const response = await axios.post(`${apiBaseURL}/api/image`, image);
  return response.data;
};

在我传递字符串变量 image 的地方,我需要将它放在花括号中以使其成为一个对象。这个:

const uploadImg = async (image: string) => {
  const response = await axios.post(`${apiBaseURL}/api/image`, {image});
  return response.data;
};

...完美运行。