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

使用Prisma+MongoDB+NextJS发送POST请求时遇未定义属性读取错误

问题原因
  1. createTask出错时无返回值:当createTask函数捕获到错误时,仅打印错误但未返回任何值,导致API中的taskResponse变为undefined,此时访问taskResponse.error就会触发Cannot read properties of undefined (reading 'error')错误。
  2. 返回值键名不匹配:createTask成功时返回{task: createdTask},但API中尝试读取taskResponse.createdTask,这会导致返回的createdTask为undefined。
修正方案

1. 修复createTask函数

调整函数返回值,确保成功和失败时都返回结构一致的对象:

export const createTask = async (task) => { 
  try {
    const createdTask = await prisma.tasks.create({ data: task }); 
    // 统一返回键名为createdTask,匹配API中的读取逻辑
    return { createdTask };
  } catch (error) {
    console.error('Error creating task:', error);
    // 捕获错误后返回包含error属性的对象
    return { error: error.message };
  }
};

2. 修正API路由逻辑

完善请求处理逻辑,添加基础校验并正确处理返回值:

if (req.method === 'POST') {
  try {
    const data = req.body;
    // 基础校验:确保请求体不为空
    if (!data) {
      return res.status(400).json({ error: '请求体不能为空' });
    }
    const taskResponse = await createTask(data);
    if (taskResponse.error) {
      throw new Error(taskResponse.error);
    }
    return res.status(201).json({ createdTask: taskResponse.createdTask });
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
} else {
  // 处理非POST请求
  res.setHeader('Allow', ['POST']);
  res.status(405).end(`Method ${req.method} Not Allowed`);
}
额外检查项
  • 确保Prisma客户端已正确初始化(通常在lib/prisma.js类文件中导出实例,并在createTask中正确导入);
  • 使用Postman请求时,需设置请求头为Content-Type: application/json,且请求体为合法JSON格式,字段与Prisma schema中tasks模型匹配;
  • 确认MongoDB连接正常,已执行prisma generate和prisma db push/prisma migrate dev完成schema同步。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 02:52:20