I have a strange problem that in the Next.js project that I am going to run. When I take a photo of the API project for the URL, it gives an error of 500, but it receives other data such as price without any error.
This is the fetchApi file:
import axios from "axios";
export const baseUrl = "https://bayut.p.rapidapi.com";
export const fetchApi = async (url) => {
const { data } = await axios.get(url, {
headers: {
"x-rapidapi-host": "bayut.p.rapidapi.com",
"x-rapidapi-key": "ab9d289155mshc78dae64ad21407p17222bjsnb2a155e6d666",
},
});
return data;
};
This is index file I generate the home page here and get the API via getStaticProps and generate the items in the property folder.
import Link from 'next/link';
import Image from 'next/image';
import { Flex, Box, Text, Button } from '@chakra-ui/react';
import Property from '../component/Property';
import { baseUrl, fetchApi } from '../utils/fetchApi';
export const Banner = ({ purpose, title1, title2, desc1, desc2, buttonText, linkName, imageUrl }) => (
<Flex flexWrap='wrap' justifyContent='center' alignItems='center' m='10'>
<Image src={imageUrl} width={500} height={300} />
<Box p='5'>
<Text color='gray.500' fontSize='sm' fontWeight='medium'>{purpose}</Text>
<Text fontSize='3xl' fontWeight='bold'>{title1}<br />{title2}</Text>
<Text fontSize='lg' paddingTop='3' paddingBottom='3' color='gray.700'>{desc1}<br />{desc2}</Text>
<Button fontSize='xl' bg="blue.300" color="white">
<Link href={linkName}><a>{buttonText}</a></Link>
</Button>
</Box>
</Flex>
);
const Home = ({ propertiesForSale, propertiesForRent }) => (
<Box>
<Banner
purpose='RENT A HOME'
title1='Rental Homes for'
title2='Everyone'
desc1=' Explore from Apartments, builder floors, villas'
desc2='and more'
buttonText='Explore Renting'
linkName='/search?purpose=for-rent'
imageUrl='https://bayut-production.s3.eu-central-1.amazonaws.com/image/145426814/33973352624c48628e41f2ec460faba4'
/>
<Flex flexWrap='wrap'>
{propertiesForRent.map((property) => <Property property={property} key={property.id} />)}
</Flex>
<Banner
purpose='BUY A HOME'
title1=' Find, Buy & Own Your'
title2='Dream Home'
desc1=' Explore from Apartments, land, builder floors,'
desc2=' villas and more'
buttonText='Explore Buying'
linkName='/search?purpose=for-sale'
imageUrl='https://bayut-production.s3.eu-central-1.amazonaws.com/image/110993385/6a070e8e1bae4f7d8c1429bc303d2008'
/>
<Flex flexWrap='wrap'>
{propertiesForSale.map((property) => <Property property={property} key={property.id} />)}
</Flex>
</Box>
);
export async function getStaticProps() {
const propertyForSale = await fetchApi(`${baseUrl}/properties/list?locationExternalIDs=5002&purpose=for-sale&hitsPerPage=25`);
const propertyForRent = await fetchApi(`${baseUrl}/properties/list?locationExternalIDs=5002&purpose=for-rent&hitsPerPage=25`);
return {
props: {
propertiesForSale: propertyForSale?.hits,
propertiesForRent: propertyForRent?.hits,
},
};
}
export default Home;
This is property file.
import Link from 'next/link';
import Image from 'next/image';
import { Box, Flex, Text } from '@chakra-ui/layout';
import { Avatar } from '@chakra-ui/avatar';
import { FaBed, FaBath } from 'react-icons/fa';
import { BsGridFill } from 'react-icons/bs';
import { GoVerified } from 'react-icons/go';
import millify from 'millify';
import DefaultImage from '../assets/images/house.jpg';
const Property = ({ property: { coverPhoto, price, rentFrequency, rooms, title, baths, area, agency, isVerified, externalID } }) => (
<Link href={`/property/${externalID}`} passHref>
<Flex flexWrap='wrap' w='420px' p='5' paddingTop='0px' justifyContent='flex-start' cursor='pointer' >
<Box>
<Image src={coverPhoto.url} width={400} height={260} />
</Box>
<Box w='full'>
<Flex paddingTop='2' alignItems='center' justifyContent='space-between'>
<Flex alignItems='center'>
<Box paddingRight='3' color='green.400'>{isVerified && <GoVerified />}</Box>
<Text fontWeight='bold' fontSize='lg'>AED {price}{rentFrequency && `/${rentFrequency}`}</Text>
</Flex>
<Box>
<Avatar size='sm' src={agency?.logo?.url}></Avatar>
</Box>
</Flex>
<Flex alignItems='center' p='1' justifyContent='space-between' w='250px' color='blue.400'>
{rooms}
<FaBed /> | {baths} <FaBath /> | {millify(area)} sqft <BsGridFill />
</Flex>
<Text fontSize='lg'>
{title.length > 30 ? title.substring(0, 30) + '...' : title}
</Text>
</Box>
</Flex>
</Link>
);
export default Property;
It is really strange that it receives all the information correctly from the server, except for the photo. Do you have a solution?