Декодировать объект ReadableStream nextjs 13 api route

Я отправляю значение в свой серверный код, который не читается правильно. Я использую экспериментальный каталог приложений 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, но я не могу найти ничего в документах или примерах для этого, возможно, потому, что существует независимый от фреймворка метод для декодирования объекта, который мне неизвестен?

Заранее спасибо.

ты пробовал делать const { address } = JSON.parse(req.body);

inkredusk 31.03.2023 16:13

@inkredusk я пробовал это, но это не работает: SyntaxError: Unexpected token 'o', "[object Rea"... is not valid JSON

Bigboss01 31.03.2023 17:14

Не работает в 13.4.1

ReZ 08.05.2023 23:31

@ReZ, попробуйте ответ FahadAlAraik, у меня он работает правильно - в общем, вам нужно проверить, получаете ли вы читаемый объект потока и декодируете ли его в json. У меня была проблема, когда я делал запрос API к моему серверному компоненту, который делал запрос API к внешнему API. Я не мог получить внешний ответ API без предварительного декодирования его в моем серверном компоненте и повторного кодирования перед отправкой на клиентскую сторону. если вы хотите опубликовать вопрос, я посмотрю, могу ли я помочь

Bigboss01 09.05.2023 10:47

@ Bigboss01 Спасибо за ответ, но я решил свою проблему. Я использовал typescript в своем следующем приложении, поэтому я получил ошибку типа, потому что я использовал неправильный тип. Я использовал NexApiRequest вместо NextRequest.

ReZ 09.05.2023 15:30
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
833
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Я думаю, что вы хотите сделать это:

...
const { address } = req.body
const isAuthenticated = await checkBalance(address, threshold);
...

о, извините, это была оплошность - я исправил код, он все равно возвращает undefined

Bigboss01 31.03.2023 16:06

Я не знаю, почему он возвращает читаемый поток, может быть, вам стоит это понять. Но если вы хотите попробовать прочитать поток, загляните сюда: developer.mozilla.org/en-US/docs/Web/API/Streams_API/…

Pedro Mendes 31.03.2023 17:27

Пользователь 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».

Andrew K 19.05.2023 19:41

Другие вопросы по теме