如何从 Next.js 中的 API 路由发送 JSON 响应?

swf*_*u69 3 javascript rest node.js next.js

我正在为 Next.js 应用程序开发一个小型 REST API。如果我将我的放在route.tsrootDir -> app -> api -> hello -> route.ts 中,如下所示,那么它可以工作:

//route.ts
export async function GET(request: Request) {
  return new Response('Hello, Next.js!')
}
Run Code Online (Sandbox Code Playgroud)

我可以通过 Postman 向 localhost:3000/api/hello 发出成功的 GET 请求。

我现在将代码更改为以下内容:

import { NextApiRequest, NextApiResponse } from "next";

export async function GET(request: NextApiRequest, response: NextApiResponse) {
  return response.json({ message: "Hello, Next.js!" });
}
Run Code Online (Sandbox Code Playgroud)

现在它失败了,我收到错误消息:

error TypeError: response.json is not a function
Run Code Online (Sandbox Code Playgroud)

该问题是已知的,但升级到最新的 lts 或最新的节点版本并不能解决我的问题: https: //github.com/vercel/next.js/issues/48524

You*_*mar 7

虽然您的尝试可以在 Next.js 的目录中进行pages,但这是设置路由的初始方法,对于较新的app文件夹,您需要使用NextResponse来自 的对象next/server,正如您可以在文档中阅读的那样:

import { NextResponse } from "next/server";

export async function GET(request: Request) {
  return NextResponse.json({ messsage: "Hello World" });
}
Run Code Online (Sandbox Code Playgroud)