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;
};
...完美运行。
当我向我的 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;
};
...完美运行。