СЛЕДУЮЩАЯ Ошибка типа JS: не удалось проанализировать URL-адрес из /api/projects ИЛИ Ошибка: подключение ECONNREFUSED 127.0.0.1:3000

я использую

      export const getStaticProps = async () => {
      export const getStaticPaths = async () => {

и доступ к моему API (pages/api/proyects/), созданному с помощью next js на моем локальном хосте

        const res = await fetch("http://localhost:3000/api/projects");

когда я создаю приложение в netlify, я получаю эту ошибку.

        const res = await fetch("/api/projects/");

но я получаю новую ошибку «TypeError: Failed to parse URL from/api/project», так что я говорю, что следующему js нужен полный URL для доступа к данным,

мой конечный URL-адрес в netlify — https://v2ds.netlify.app, поэтому я думаю, что мне нужно сначала запустить мой API, но как я это сделаю, если для запуска моего API мне нужно развернуть мое приложение?

"netlify хочет это:"

      const res = await fetch("https://v2ds.netlify.app/api/projects/");

но как я могу получить доступ к API, если приложение не было создано в первый раз? я работаю с getStaticProps, getStaticPaths mongoose и API от next js

Итак, последний вопрос: как я могу развернуть свое приложение для netlify и доступа к данным в момент сборки?

спасибо, если бы вы могли мне помочь

4 ответа

на стороне сервера все находится на сервере. Таким образом, вам не нужно делать http-запрос относительного URL-адреса, вам просто нужно импортировать файл API, а затем запустить его:

       const res = await import("../../..the location of your api file");

тогда вы можете получить доступ к вашей функции-обработчику, например:

      await (await res.handler()).json() 

Надеюсь, это вам поможет!

Вы можете добиться этого, разделив базовый URL-адрес запроса API в соответствии с рабочей средой. Например

давайте создадим компонент с именем checkEnvironment, а затем просто вернем базовый URL-адрес из компонента.

      export const checkEnvironment = () => {
  let base_url =
    process.env.NODE_ENV === "development"
      ? "http://localhost:3000"
      : "https://example.com"; // https://v2ds.netlify.app

  return base_url;
};

а затем просто используйте это в своем getStaticProps следующим образом:

      export const getStaticProps = async (ctx: any) => {
    const posts = await fetch(checkEnvironment().concat("/api/posts"));
    const json = await posts.json();
  
    return {
      props: { data: json },
    };
};

Изменить . Вы также можете сделать что-то подобное для своей локальной и производственной среды:

      
export const getServerSideProps = async (ctx: NextPageContext) => {
  const request = await fetch(
    process.env.NODE_ENV === "development"
      ? `http://${ctx.req?.headers.host}/api/products`
      : `https://${ctx.req?.headers.host}/api/products`
  );
  const json = await request.json();

  return {
    props: {
      data: json.data,
    },
  };
};

решение таково: сначала разверните приложение только с API (без страниц, только с API), чтобы во время сборки, когда вашему приложению нужны данные, можно было получить доступ к общедоступной ссылке!; позже создайте все приложение, и оно будет работать!

Проверьте, правильно ли подключен ваш терминал mongod к базе данных mongosh.

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