英文:
Decode ReadableStream object nextjs 13 api route
问题
我正在向我的服务器端代码发送一个值,但它没有被正确读取。我正在使用NextJS的实验性App目录。
//src/app/api/auth/route.js
export async function POST(req, res) {
console.log(req.body);
const { address } = req.body;
const isAuthenticated = await checkBalance(address, threshold);
if (isAuthenticated) {
return new Response("已授权", { status: 200 });
} else if (isAuthenticated == false) {
return new Response("未经授权", { status: 401 });
} else if (isAuthenticated == undefined) {
return new Response("错误", { status: 500 });
}
}
控制台日志显示为:ReadableStream { locked: false, state: 'readable', supportsBYOB: false }
。
address
是 undefined
。
这是 API 调用代码:
const response = await fetch("/api/auth", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({ address: walletAddress }),
});
const data = await response.json();
我在另一个类似问题的答案中读到,Next.js 12+ 应该自动解析请求-我做错了什么吗?我假设 Next.js 已经有一个协议来解码 ReadableStream,但我在文档或示例中找不到相关信息,也许是因为有一种跨框架的解码对象的方法我不熟悉?
提前感谢。
英文:
I'm sending a value to my server side code that isn't being read correctly. I'm using the NextJS experimental App directory
//src/app/api/auth/route.js
export async function POST(req, res) {
console.log(req.body);
const { address } = req.body;
const isAuthenticated = await checkBalance(address, threshold);
if (isAuthenticated) {
return new Response("Authorized", { status: 200 });
} else if (isAuthenticated == false) {
return new Response("Unauthorized", { status: 401 });
} else if (isAuthenticated == undefined) {
return new Response("Error", { status: 500 });
}
}
console log is: ReadableStream { locked: false, state: 'readable', supportsBYOB: false }
const address is undefined
.
This is the api call:
const response = await fetch("/api/auth", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({ address: walletAddress }),
});
const data = await response.json();
I read in another answer to a similar question that nextjs12+ is supposed to parse the request automatically- what am I doing wrong? I'm assuming that nextjs has a protocol in place for decoding the ReadableStream but I can't find anything in the docs or examples for this, maybe because there is a framework agnostic method for decoding the object that is unknown to me?
Thank you in advance.
答案1
得分: 19
这是您要翻译的内容:
"我遇到了类似的问题,你可以尝试这个:
const body = await req.json()
const {address} = body
// 剩下的代码
```"
<details>
<summary>英文:</summary>
I've faced a similiar problem, you can try this:
const body = await req.json()
const {address} = body
// the rest of your code
</details>
# 答案2
**得分**: 6
你需要**等待**来自Next.js的请求,以便获取body对象。就像下面的代码一样:
```javascript
import { NextResponse } from "next/server";
export async function POST(req) {
const body = await req.json();
console.log(body);
return NextResponse.json(body);
}
英文:
you need to await the request from nextjs in order to get the body object.
Like the code bellow:
import { NextResponse } from "next/server";
export async function POST(req) {
const body = await req.json();
console.log(body);
return NextResponse.json(body);
}
答案3
得分: 0
...
const { address } = req.body
const isAuthenticated = await checkBalance(address, threshold);
...
英文:
I think what you want to do is:
...
const { address } = req.body
const isAuthenticated = await checkBalance(address, threshold);
...
答案4
得分: 0
一位Discord用户推荐使用const address = await req.json();
,而不是const {address} = req.body
,它有效。
英文:
A discord user recommended const address = await req.json();
instead of const {address} = req.body
and it works.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论