You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Axios POST请求出现ERR_BAD_REQUEST错误求助

Axios POST请求返回ERR_BAD_REQUEST错误排查

问题详情

我的Axios POST方法无法正常运行,控制台输出ERR_BAD_REQUEST错误。对照教程代码反复确认过,和教程里能正常运行的代码完全一致,但我的就是不行。

前端提交代码

const onSubmit = async (values: z.infer<typeof formSchema>) => {
    try {
        setLoading(true);
        const response = await axios.post('/api/stores', values);

        console.log(response.data)
    } catch (error: any) {
        console.error(error);
    } finally {
        setLoading(false);
    }
};

后端API路由代码(api/stores/route.ts)

import prismadb from "@/lib/prismadb";
import { auth } from "@clerk/nextjs";
import { NextResponse } from "next/server";

export async function POST(req: Request) {
    try {
        const { userId } = auth();
        const body = req.json();

        const { name }: any = body;

        if (!userId) { 
            return new NextResponse("Unauthorized", { status: 401 });
        }

        if (!name) {
            return new NextResponse("Name is required", { status: 400 });
        }

        const store = await prismadb.store.create({
            data: {
                name,
                userId
            },
        });

        return NextResponse.json(store);

    } catch(error) {
        console.log('[STORES_POST]', error);
        return new NextResponse("Internal error", { status: 500 });
    }
};

问题原因及解决办法

核心问题出在后端代码的req.json()调用上——这是一个异步方法,你没有添加await关键字,导致body实际上是一个Promise对象,而非解析后的JSON数据。此时解构name会得到undefined,触发了if (!name)的判断逻辑,返回400状态码,也就是前端看到的ERR_BAD_REQUEST。

修改后端POST方法,给req.json()加上await:

const body = await req.json();

另外,建议避免使用any类型断言,最好定义接口来规范请求体结构,示例如下:

interface StoreRequestBody {
  name: string;
}

const { name } = await req.json() as StoreRequestBody;

这样能避免类型相关的潜在问题,也更符合TypeScript的最佳实践。

内容的提问来源于stack exchange,提问作者bouhousse khalid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 20:07:28