DevGang
Авторизоваться

Простое приложение React Next + Node на языке Typescript

В этом уроке мы расскажем о том, как создать простое приложение с компонентами frontend и backend на языке Typescript.

Для создания фронтенда будет использоваться Next.JS 13.4 (с новым маршрутизатором /app), а для бэкенда - Node.JS.

Необходимые условия для работы с Node.JS

Во-первых, убедитесь, что на вашем ноутбуке установлен Node.JS.

Для проверки выполните команду:

node --version

и это должно выдать текущую версию Node, например, v18.14.2.

Если нет, то я рекомендую устанавливать его через Node Version Manager (NVM), чтобы можно было легко устанавливать новые версии Node. Например, в Linux:

curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash  # install the node version manager (nvm)
source ~/.bashrc  # restart the Terminal so we can load the nvm environment
nvm install 18

или ознакомьтесь с инструкцией по установке.

После этого также может быть полезно обновить версию NPM, которая является менеджером пакетов Node для ваших пакетов NPM:

npm install -g npm@latest

Цель создания файловой структуры

Наша задача - создать файловую структуру фронтенда и бэкенда следующим образом:

📦my-app
 ┣ 📂backend
 ┃ ┣ 📜index.js
 ┃ ┣ 📜package.json
 ┃ ┗ 📜yarn.lock
 ┗ 📂frontend
 ┃ ┣ 📂src
 ┃ ┃ ┗ 📂app
 ┃ ┃ ┃ ┣ 📜favicon.ico
...

На этом этапе создайте папку с именем my-app.

Фронтэнд

В каталоге my-app/ создайте приложение Next.JS:

npx create-next-app@latest

Вот мои настройки при запросе:

В только что созданном каталоге frontend/ запустите приложение, используя:

npm run dev

Вы увидите эту страницу по адресу URL http://localhost:3000:

Мы можем начать вносить изменения в файл frontend/src/app/page.tsx для создания следующей простой страницы:

export default function Home() {
  return <main>Hello world</main>;
}

Открыв ту же страницу еще раз, мы увидим скучный результат:

Теперь вы можете вносить изменения на эту страницу!

Бэкэнд

Создайте в каталоге my-app/ новую папку с названием backend/.

Запустите эту программу в каталоге backend/:

npm init -y

который создаст для вас простой проект NPM. Давайте установим несколько простых пакетов, опять же в backend/:

npm i cors @types/cors nodemon ts-node express @types/express

Мы используем nodemon для того, чтобы можно было редактировать файлы бэкенда и автоматически применять изменения без необходимости обновлять страницу. Во фронтенде это уже происходит автоматически.

А затем добавьте новый файл index.ts внутри backend/:

import express from "express";
import cors from "cors";

// Create express app
const app = express();

app.use(express.json());
app.use(cors());

app.get("/helloText", (req, res) => {
  res.send({ myResponse: "Hello World!" });
});

app.listen(8000, () => {
  console.log(`Server is running on port ${8000}`);
});

Я бы также рекомендовал добавить эту  строку start в раздел scripts в файле backend/package.json:

...
 "scripts": {
    "start": "nodemon index.ts",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
...

Теперь можно запустить программу с помощью:

npm start

Перейдя по адресу http://localhost:8000/helloText, мы видим, что бэкэнд работает и отправляет данные:

Соединение фронтенда и бэкенда

Теперь мы просто запрашиваем некоторые данные из бэкенда и отображаем их на фронтенде.

Изменим содержимое файла frontend/src/app/page.tsx на следующее:

"use client";
import { useEffect, useState } from "react";

export default function Home() {
  const [data, setData] = useState("");

  // fetch data from API
  useEffect(() => {
    fetch("http://localhost:8000/helloText")
      .then((res) => res.json())
      .then((data) => setData(data));
  });

  return <main>{`Hello world: ${JSON.stringify(data)}`}</main>;
}

Обратите внимание, что здесь используется клиентский рендеринг ("use client"), поскольку мы используем хуки React.

Обновив страницу с работающими фронтендом и бэкендом, мы видим, что данные бэкенда отображаются:

Вот и всё! Удачи!

Источник:

#TypeScript
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу