Я только что попал в Next.js и не могу понять, как подключить мое приложение next.js к моему Express API. Мне удалось заставить его работать, но я уверен, что это неправильный способ его реализации, поскольку в моем компоненте Index я жестко закодировал URL выборки и знаю, что в производственном режиме, если порт не тот же, он не будет работа.
Я попытался указать только маршрут, а API извлечения не позволяет мне сделать это.
Моя страница указателя выглядит так
import Link from "next/link";
import fetch from "isomorphic-unfetch";
const Index = props => (
<>
<h1>Youtubers</h1>
<ul>
{props.youtubers.map(youtuber => (
<li key={youtuber._id}>
<Link as={`/p/${youtuber._id}`} href={`/post?id=${youtuber.id}`}>
<a>{youtuber.name}</a>
</Link>
</li>
))}
</ul>
</>
);
Index.getInitialProps = async function() {
// this url I think is wrong ↓
const res = await fetch("https://localhost:5000/youtuber");
const data = await res.json();
return {
youtubers: data.youtubers
};
};
export default Index;
И в моем server.js это есть внутри app.prepare (). Then ()
server.use(bodyParser.urlencoded({ extended: false }));
server.use(bodyParser.json());
mongoose.connect(process.env.MONGODB_PASSWORD, {
useNewUrlParser: true,
useCreateIndex: true
});
mongoose.connection.on("open", function() {
console.log("mongodb is connected!!");
});
mongoose.connection.on(
"error",
console.error.bind(console, "MongoDB connection error:")
);
//CORS handler
server.use((req, res, next) => {
res.header("Access-Control-Allow-Origin", "*");
res.header(
"Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept, Authorization"
);
if (req.method === "OPTIONS") {
res.header(
"Access-Control-Allow-Methods",
"PUT, POST, PATCH, DELETE, GET"
);
return res.status(200).json({});
}
next();
});
//Question Route
server.use("/youtuber", youtuberRoutes);
server.get("*", (req, res) => {
return handle(req, res);
});
server.listen(port, err => {
if (err) throw err;
console.log(`> Ready on http://localhost:${port}`);
});