В современном мире веб-разработки создание мощного и эффективного внутреннего сервера имеет важное значение для создания надежных веб-приложений. Многие разработчики обращаются к популярным платформам, таким как Express.js или Django, для настройки своих внутренних серверов, но задумывались ли вы когда-нибудь об использовании Bun.js Runtime? В этой статье мы рассмотрим, как создать внутренний сервер CRUD (создание, чтение, обновление, удаление) с помощью Bun.js Runtime, легкой и быстрой среды выполнения JavaScript. В этой статье мы рассмотрим процесс использования среды выполнения Bun (подробнее о том, почему Bun здесь), мощной комбинации, которая может повысить производительность и масштабируемость вашего приложения с незначительной разницей.

Шаги создания

Вы можете установить плюшку отсюда

  1. Создайте каталог проекта и перейдите в каталог проекта.
mkdir crud-app
cd crud-app

2. Запустите команду Bun init, чтобы инициализировать репозиторий.

bun init

3. Установите модуль подушка безопасности.

bun install bunrest

4. Перейдите в файл index.ts и добавьте этот код, который инициализирует и настраивает сервер.

import server from 'bunrest';

const app = server();
app.listen(3000, () => {
 console.log("Server started on port 3000");
})

5. Добавьте конечную точку POST, чтобы добавить задачу.

app.post('/todos', (req, res) => {
 if (typeof req.body === 'object') {
  const todo: any = req.body.todo;
  const todo_id = todo.id;
  todosMap.set(todo_id, todo);
  res.status(201).json(todo);
 } else {
  res.status(400).json({error: "Invalid todo"});
 }
})

6. Добавьте конечные точки GET, чтобы получать все задачи и определенные задачи.

app.get('/todos', (req, res) => {
 res.status(200).json(Array.from(todosMap.values()));
})

app.get('/todos/:id', (req, res) => {
 const todo_id = req.params?.id;
 const todo = todosMap.get(todo_id);
 if (todo) {
  res.status(200).json(todo);
 } else {
  res.status(404).json({error: "Todo not found"});
 }
})

7. Добавьте конечную точку PUT для обновления задач.

app.put('/todos/:id', (req, res) => {
 const todo_id = req.params?.id;
 const todo = todosMap.get(todo_id);
 if (typeof req.body==='object' && todo) {
  const todo: any = req.body.todo;
  todosMap.set(todo_id, todo);
  res.status(200).json(todo);
 } else {
  res.status(404).json({error: "Todo not found"});
 }
})

8. Добавьте конечную точку DELETE для удаления задач.

app.delete('/todos/:id', (req, res) => {
 const todo_id = req.params?.id;
 const todo = todosMap.get(todo_id);
 if (todo) {
  todosMap.delete(todo_id);
  res.status(204).send('deleted');
 } else {
  res.status(404).json({error: "Todo not found"});
 }
})

Полный файл .ts

import server from 'bunrest';

const app = server();
const todosMap: Map<Number, String> = new Map();
app.post('/todos', (req, res) => {
 if (typeof req.body === 'object') {
  const todo: any = req.body.todo;
  const todo_id = todo.id;
  todosMap.set(todo_id, todo);
  res.status(201).json(todo);
 } else {
  res.status(400).json({error: "Invalid todo"});
 }
})
app.get('/todos', (req, res) => {
 res.status(200).json(Array.from(todosMap.values()));
})
app.get('/todos/:id', (req, res) => {
 const todo_id = req.params?.id;
 const todo = todosMap.get(todo_id);
 if (todo) {
  res.status(200).json(todo);
 } else {
  res.status(404).json({error: "Todo not found"});
 }
})
app.put('/todos/:id', (req, res) => {
 const todo_id = req.params?.id;
 const todo = todosMap.get(todo_id);
 if (typeof req.body==='object' && todo) {
  const todo: any = req.body.todo;
  todosMap.set(todo_id, todo);
  res.status(200).json(todo);
 } else {
  res.status(404).json({error: "Todo not found"});
 }
})
app.delete('/todos/:id', (req, res) => {
 const todo_id = req.params?.id;
 const todo = todosMap.get(todo_id);
 if (todo) {
  todosMap.delete(todo_id);
  res.status(204).send('deleted');
 } else {
  res.status(404).json({error: "Todo not found"});
 }
})
app.listen(3000, () => {
 console.log("Server started on port 3000");
})

Запустите приложение с помощью

bun run index.ts

Используйте почтальона, чтобы запросить вывод и проверить

PS: Это очень простой пример выполнения crud-приложения, которое вы можете использовать для более крупных приложений, таких как express.js иnest.js.

Заключение

В этой статье мы рассмотрели, как создать внутренний сервер с помощью Bun Runtime, мощной среды выполнения JavaScript, известной своей скоростью и эффективностью. Выполнив шаги, описанные выше, вы узнали, как настроить API CRUD (создание, чтение, обновление, удаление) для управления задачами. В заключение выделим несколько ключевых выводов и соображений:

  1. Bun и Bunrest: Bun Runtime в сочетании с модулем Bunrest обеспечивает легкий и эффективный способ создания внутреннего сервера на JavaScript. Это отличный вариант, если вы ищете среду выполнения, которая может повысить производительность вашего приложения.
  2. Настройка проекта: Мы начали с создания каталога проекта, его инициализации с помощью Bun.js и установки модуля Bunrest. Это закладывает основу для создания вашего внутреннего сервера.
  3. Маршрутизация и конечные точки. Мы определили несколько конечных точек для наших операций CRUD, включая POST для добавления задач, GET для получения всех или определенных задач, PUT для обновления задач и DELETE для их удаления. Это иллюстрирует гибкость и простоту создания маршрутов в Bun.js.
  4. Обработка данных: для простоты мы использовали Map для хранения наших задач. В реальном приложении вы, скорее всего, будете использовать базу данных или другие решения для хранения данных для сохранения ваших данных.
  5. Тестирование. Мы предложили использовать Postman или аналогичный инструмент для тестирования конечных точек API. Правильное тестирование необходимо для обеспечения правильной работы вашего сервера.

В заключение отметим, что Bun.js Runtime — ценный инструмент в экосистеме JavaScript, особенно для проектов, где производительность является приоритетом. Объединив Bun.js с Bunrest, вы можете быстро создать внутренний сервер с мощными конечными точками. Однако не забудьте оценить конкретные потребности вашего проекта и выбрать стек технологий, который лучше всего соответствует вашим целям и требованиям. Приятного кодирования!