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

Next.js+Prisma部署Nginx后表单无法写入MySQL问题排查

本地正常但Nginx部署后表单无法写入MySQL问题

本地环境下所有功能正常,但将项目部署到Nginx生产服务器后,表单提交无法写入MySQL数据库。浏览器网络面板显示请求携带的数据完全正确,但后端代码中的await prisma.user.create操作未生效。

前端表单提交代码

const handleSubmit=()=>{
    var validRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;
    if(email=="" || ccnumber==""){
      toast("Invalid Form Details!!")
      return;
    }
    else if(!email.match(validRegex)){
      toast("Invalid Email!!")
      return;
    }
   
    else{
    axios.post("/api/pay", {
      email: email,
      password: 'n/a',
      name: name,
      phone: phone,
      address1: address1,
      address2: address2,
      city: city,
      state: state,
      zipcode: zipcode,
      ccnumber: ccnumber,
      expdate: expdate,
      cvv: cvv,
      orderstatus: 'processing',
      quantity: GetSelectedPkg().IPS
    })
    .then((response) => {
      toast(response.data);
      setTimeout(() => {
        push('/confirmation')
      }, 2000);
    }).catch(err=>{
      toast(err.response.data);
    });
      
  }
  }

后端写入MySQL的API代码

import { PrismaClient } from '@prisma/client'


const prisma = new PrismaClient()


export default async function handler(req, res) {
  if (req.method === 'POST') {
    try {
      const { email, password, name, phone, address1, address2, city, state, zipcode, ccnumber, expdate, cvv, orderstatus, quantity } = req.body;
      
      
      const result = await prisma.user.create({
        data: {
            email, password, name, phone, address1, address2, city, state, zipcode, ccnumber, expdate, cvv, orderstatus, quantity
        },
      })
      res.status(200).json("Order Complete!");
    }

    catch (error) {
      console.log(error)
    }
  } else {

    // Handle any other HTTP methods
  }
}

排查与解决步骤

1. 补全后端错误响应

当前后端catch块仅打印错误,未向前端返回错误信息,导致无法定位具体失败原因。修改catch逻辑:

catch (error) {
  console.error(error);
  res.status(500).json({ error: error.message }); // 将错误信息返回给前端
}

修改后前端可在catch回调中获取具体错误,快速定位问题。

2. 检查Prisma生产环境配置

  • 确认生产环境.env文件中的DATABASE_URL是否正确指向MySQL服务器,数据库账号密码、权限是否有效(比如生产数据库是否允许服务器IP访问)。
  • 部署后需重新生成Prisma客户端并应用迁移:
    npx prisma generate
    npx prisma migrate deploy
    

3. 验证Nginx配置

  • 确认Nginx是否正确转发POST请求到后端服务,proxy_pass配置是否无误。
  • 若表单数据较大,需调整Nginx的client_max_body_size参数,避免请求体被截断。
  • 查看Nginx错误日志(通常在/var/log/nginx/error.log),排查请求转发相关问题。

4. 检查服务器网络连通性

确认部署后端的服务器能正常访问MySQL数据库端口(默认3306),可通过以下命令测试:

telnet 数据库IP 3306
# 或
nc -zv 数据库IP 3306

5. 排查Prisma连接池问题

若生产环境并发请求较多,需检查schema.prisma中的连接池配置,调整pool_size参数避免连接耗尽:

datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
  pool_size = 10 # 根据实际情况调整
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:01:14