Next.js API路由调用MySQL遇无响应错误:No response is returned from route handler
解决Next.js API路由返回"No response is returned from route handler"错误
你的问题出在异步逻辑的处理上:db.query使用了回调函数,这是异步执行的,但外层的GET函数没有返回任何有效值——回调里的return只属于回调函数本身,不会作为GET函数的返回结果。Next.js要求API路由处理器必须返回一个响应(或Promise),当GET函数执行完毕(此时回调还没触发),框架就会判定没有返回响应,抛出错误。
下面是两种可行的修复方案:
方案1:改用async/await(推荐)
如果你的数据库库支持Promise(比如mysql2/promise),可以直接用异步语法处理:
import { NextResponse } from "next/server"; import db from '../../../../lib/db'; export async function GET(request) { try { const [results] = await db.query('SELECT * FROM department'); // 查询成功用200状态码更合适,201一般用于资源创建成功 return NextResponse.json({ data: results }, { status: 200 }); } catch (error) { console.error('Error querying the database:', error); return NextResponse.json({ error: 'Internal Server Error' }, { status: 500 }); } }
方案2:封装回调为Promise
如果只能使用回调式API,手动把db.query封装成Promise,让GET函数返回这个Promise:
import { NextResponse } from "next/server"; import db from '../../../../lib/db'; export function GET(request) { return new Promise((resolve) => { db.query('SELECT * FROM department', (error, results, fields) => { if (error) { console.error('Error querying the database:', error); resolve(NextResponse.json({ error: 'Internal Server Error' }, { status: 500 })); return; } resolve(NextResponse.json({ data: results }, { status: 200 })); }); }); }
内容的提问来源于stack exchange,提问作者Shark
相关产品推荐
相关产品推荐

