СЛЕДУЮЩАЯ Ошибка типа 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.