Как создать NodeJS API без использования фреймворка

Как создать NodeJS API без использования фреймворка

Node.js — это среда выполнения JavaScript с открытым исходным кодом, построенная на движке Chrome v8, которая позволяет запускать код JavaScript вне браузера.





Исправление цикла автоматического ремонта Windows 10

Его модель событий, экосистема и скорость сделали Node.js одной из самых востребованных и используемых сред выполнения для серверных приложений.





Большинство серверов API Node.js используют Express или другую платформу. Однако вы также можете создать простой API Node.js без фреймворка всего за несколько шагов.





СДЕЛАТЬ ВИДЕО ДНЯ

Шаг 1. Настройка среды разработки

Создайте каталог проекта и CD в него, запустив:

mkdir nodejs-api 
cd nodejs-api

Далее инициализируйте нпм в вашем проекте, запустив:



npm init -y 

Этот CRUD API будет включать использование MongoDB, базы данных NoSQL, и ее популярного ODM, mongoose.

Выполните следующую команду для установки мангуста :





npm install mongoose 

Далее создайте сервер.js файл в корневом каталоге вашего проекта и добавьте блок кода ниже, чтобы создать сервер:

const http = require("http"); 
const server = http.createServer((req, res) => {});

server.listen(3000, () => {
console.log(`Server is running`);
});

Этот блок кода импортирует модуль http, основной модуль Node.js. Модуль http позволяет Node.js передавать данные по HTTP. Этот модуль содержит методы, необходимые для создания сервера.





Затем он вызывает модуль http создать сервер метод, который создает и возвращает экземпляр сервера. создать сервер метод принимает функцию обратного вызова с объектом запроса и ответа в качестве параметров.

Далее код вызывает Слушать метод на возвращенном экземпляре сервера. Это позволяет серверу начать прослушивание трафика на данном порту. Слушать метод запускает обратный вызов — второй аргумент — в случае успеха.

Наконец, создайте два каталога с именем маршруты а также модели в корневом каталоге вашего проекта. маршруты папка будет содержать логику маршрутизации для вашего API, а модель будет содержать все, что связано с базой данных.

Шаг 2. Подключение вашего приложения к базе данных

В сервер.js , импорт мангуста :

ББД3ДА6А4КСЕ80441175ФД5Д2054К38320294АФ7

Позвоните соединять метод на мангуста и передайте свой URI MongoDB в качестве аргумента:

mongoose.connect("MongoDB_URI") 

Шаг 3: Создание модели API

Создайте CRUD API для простого приложения для блога. В твоей модели папку, создайте blogModel.js файл и добавьте в него следующий код:

const mongoose = require("mongoose"); 
const blogSchema = mongoose.Schema({
title: {
type: String,
required: [true, "Blog must have a title"],
},
body: {
type: String,
required: [true, "Blog must have a body"],
},
});
module.exports = mongoose.model("Blog", blogSchema);

Приведенный выше блок кода создает модель мангуста с двумя свойствами и сопоставляет их с базой данных MongoDB.

Оба свойства в этой модели имеют Нить введите с требуется установлен в истинный . Сопутствующие сообщения об ошибках будут отображаться, если тело запроса не содержит ни одного из свойств.

Последняя строка создает и экспортирует модель мангуста, вызывая метод модель метод на мангуста. Передайте название модели ( Блог ) в качестве первого аргумента и схемы ( блогРасписание ) в качестве второго аргумента.

Шаг 4: Реализация маршрутизации в вашем приложении

Без помощи такие фреймворки, как Express , вам придется вручную создавать логику для обработки каждого запроса к вашему API.

Сначала создайте blogRoutes.js файл в вашем маршруты папку, затем импортируйте модель блога:

facebook вы можете увидеть, кто просматривал ваш профиль
const Blog = require("../models/blogModel"); 

Далее создайте асинхронный маршрутизатор функция, пропуск запрос а также разрешение в качестве параметров и экспортируйте функцию:

const router = async function (req, res) {}; 
module.exports = router;

Эта функция будет содержать всю вашу логику маршрутизации.

Далее вы реализуете логику маршрутизации маршрут за маршрутом.

ПОЛУЧИТЬ маршруты

Добавьте приведенный ниже блок кода в свой маршрутизатор функцию для реализации ПОЛУЧИТЬ обработчик маршрутов для запросов к /апи/блоги :

//  GET: /api/blogs 
if (req.url === "/api/blogs" && req.method === "GET") {
// get all blogs
const blogs = await Blog.find();

// set the status code and content-type
res.writeHead(200, { "Content-Type": "application/json" });

// send data
res.end(JSON.stringify(blogs));
}

Блок кода выше проверяет URL а также метод свойства объекта запроса. Затем он извлекает все блоги из базы данных через найти метод на модели мангуста ( Блог ).

Далее вызывается писатьголова метод на разрешение , объект ответа. Этот метод отправляет заголовок ответа с тремя аргументами: код состояния, необязательное сообщение о состоянии и заголовки. 200 код состояния представляет собой успешный ответ, а тип содержимого для этого вызова API установлен на приложение/json .

Наконец, закройте запрос, чтобы убедиться, что сервер не зависает, вызвав конец метод на разрешение . Призыв к JSON.stringify преобразует блоги объект в строку JSON и передать ее в конец метод возвращает его как тело ответа.

Добавьте приведенный ниже блок кода в свой маршрутизатор функцию для реализации ПОЛУЧИТЬ обработчик маршрута для одного ресурса:

// GET: /api/blogs/:id 
if (req.url.match(/\/api\/blogs\/([0-9]+)/) && req.method === "GET") {
try {
// extract id from url
const id = req.url.split("/")[3];

// get blog from DB
const blog = await Blog.findById(id);

if (blog) {
res.writeHead(200, { "Content-Type": "application/json" });
res.end(JSON.stringify(blog));
} else {
throw new Error("Blog does not exist");
}
} catch (error) {
res.writeHead(404, { "Content-Type": "application/json" });
res.end(JSON.stringify({ message: error }));
}
}

Этот код использует соответствие метод, который принимает выражение регулярного выражения в качестве аргумента, чтобы проверить, соответствует ли URL-адрес формату: /api/блоги/<число> .

Далее извлеките я бы имущество от URL строку, вызвав ее расколоть метод. Этот метод принимает шаблон в качестве аргумента ( / ), разбивает строку на основе шаблона и возвращает массив. Третий элемент этого массива — это я бы .

Наконец, извлеките документ с соответствующим я бы из вашей базы данных. Если он существует, пришлите код ответа 200 , закройте запрос и отправьте полученный блог. Если он не существует, сгенерируйте ошибку и отправьте ее в качестве ответа в блоке catch.

Почтовый маршрут

Добавьте приведенный ниже блок кода в функцию маршрутизатора, чтобы реализовать ПОЧТА обработчик маршрута:

// POST: /api/blogs/ 
if (req.url === "/api/blogs" && req.method === "POST") {
try {
let body = "";

// Listen for data event
req.on("data", (chunk) => {
body += chunk.toString();
});

// Listen for end event
req.on("end", async () => {
// Create Blog
let blog = new Blog(JSON.parse(body));

// Save to DB
await blog.save();
res.writeHead(200, { "Content-Type": "application/json" });
res.end(JSON.stringify(blog));
});
} catch (error) {
console.log(error);
}
}

Объект запроса реализует Node.js ReadableStream интерфейс. Этот поток испускает данные и конец событие, которое дает вам доступ к данным из тела запроса.

Этот код прослушивает событие данных и обрабатывает его, преобразовывая его в строку и объединяя его с тело переменная. в конец обработчик событий, он создает Блог экземпляр с проанализированной строкой тела. Затем он сохраняет новый блог, отправляет код состояния и заголовок содержимого и закрывает запрос.

ПОЛОЖИТЬ маршрут

Добавьте приведенный ниже блок кода в функцию маршрутизатора, чтобы реализовать ПОМЕЩАТЬ обработчик маршрута:

// PUT: /api/blogs/:id 
if (req.url.match(/\/api\/blogs\/([0-9]+)/) && req.method === "PUT") {
try {
// extract id from url
const id = req.url.split("/")[3];
let body = "";

req.on("data", (chunk) => {
body += chunk.toString();
});
req.on("end", async () => {
// Find and update document
let updatedBlog = await Blog.findByIdAndUpdate(id, JSON.parse(body), {
new: true,
});

res.writeHead(200, { "Content-Type": "application/json" });
res.end(JSON.stringify(updatedBlog));
});
} catch (error) {
console.log(error);
}
}

Обработчик запроса PUT почти идентичен ПОЧТА обработчик запроса, за исключением того, что он извлекает я бы имущество от URL обновить соответствующий блог.

УДАЛИТЬ Маршрут

Добавьте приведенный ниже блок кода в функцию маршрутизатора, чтобы реализовать УДАЛИТЬ обработчик маршрута:

// DELETE: /api/blogs/:id 
if (req.url.match(/\/api\/blogs\/([0-9]+)/) && req.method === "DELETE") {
try {
const id = req.url.split("/")[3];

// Delete blog from DB
await Blog.findByIdAndDelete(id);
res.writeHead(200, { "Content-Type": "application/json" });
res.end(JSON.stringify({ message: "Blog deleted successfully" }));
} catch (error) {
res.writeHead(404, { "Content-Type": "application/json" });
res.end(JSON.stringify({ message: error }));
}
}

Этот блок кода извлекает я бы от URL , удаляет документ с совпадающим я бы , отправляет код состояния и заголовки и закрывает запрос.

Наконец, импорт маршрутизатор в твоей сервер.js файл и позвоните своему маршрутизатор функция, прохождение запрос а также разрешение в качестве аргументов:

const router = require("./routes/blogRoutes"); 

const server = http.createServer((req, res) => {
router(req, res);
});

Это позволяет вашему серверу правильно перехватывать и обрабатывать запросы.

Вы можете найти готовый проект в этом Репозиторий GitHub .

Использование фреймворка Node.js

Несмотря на то, что веб-API можно создать вручную, это может оказаться сложной задачей. Вам нужно убедиться, что вы рассмотрели множество пограничных случаев, и ваш код должен быть без ошибок.

вы можете получить abc nbc и cbs на roku?

На протяжении многих лет разработчики создавали такие фреймворки, как ExpressJS, NestJS, Fastify и т. д., чтобы сделать это намного проще.