Я отправляю значение в свой серверный код, который не читается правильно. Я использую экспериментальный каталог приложений NextJS.
//src/app/api/auth/route.js
export async function POST(req, res) {
console.info(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 });
}
}
журнал консоли: ReadableStream { locked: false, state: 'readable', supportsBYOB: false }
постоянный адрес 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();
Я прочитал в другом ответе на аналогичный вопрос, что nextjs12+ должен автоматически анализировать запрос - что я делаю неправильно? Я предполагаю, что у nextjs есть протокол для декодирования ReadableStream, но я не могу найти ничего в документах или примерах для этого, возможно, потому, что существует независимый от фреймворка метод для декодирования объекта, который мне неизвестен?
Заранее спасибо.
@inkredusk я пробовал это, но это не работает: SyntaxError: Unexpected token 'o', "[object Rea"... is not valid JSON
Не работает в 13.4.1
@ReZ, попробуйте ответ FahadAlAraik, у меня он работает правильно - в общем, вам нужно проверить, получаете ли вы читаемый объект потока и декодируете ли его в json. У меня была проблема, когда я делал запрос API к моему серверному компоненту, который делал запрос API к внешнему API. Я не мог получить внешний ответ API без предварительного декодирования его в моем серверном компоненте и повторного кодирования перед отправкой на клиентскую сторону. если вы хотите опубликовать вопрос, я посмотрю, могу ли я помочь
@ Bigboss01 Спасибо за ответ, но я решил свою проблему. Я использовал typescript в своем следующем приложении, поэтому я получил ошибку типа, потому что я использовал неправильный тип. Я использовал NexApiRequest вместо NextRequest.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я думаю, что вы хотите сделать это:
...
const { address } = req.body
const isAuthenticated = await checkBalance(address, threshold);
...
о, извините, это была оплошность - я исправил код, он все равно возвращает undefined
Я не знаю, почему он возвращает читаемый поток, может быть, вам стоит это понять. Но если вы хотите попробовать прочитать поток, загляните сюда: developer.mozilla.org/en-US/docs/Web/API/Streams_API/…
Пользователь Discord порекомендовал const address = await req.json(); вместо const {address} = req.body, и это работает.
Я столкнулся с подобной проблемой, вы можете попробовать это:
const body = await req.json()
const {address} = body
// the rest of your code
Как сейчас написано, ваш ответ неясен. Пожалуйста, отредактируйте , чтобы добавить дополнительные сведения, которые помогут другим понять, как это отвечает на заданный вопрос. Вы можете найти больше информации о том, как писать хорошие ответы в справочном центре.
Этот ответ не касается случая, когда вы не получаете «application/json».
ты пробовал делать
const { address } = JSON.parse(req.body);