當我將發布請求發送到正文是單個字串的 API 時,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,但是當它看起來只是接收一個空字串時,我將控制器更改為簡單地回傳請求正文以進行測驗。
完整的快遞服務器:
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);
});
此處鏈接到 github 存盤庫以獲取后端。
uj5u.com熱心網友回復:
問題出在 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;
};
...完美運行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/439215.html
