NodeJS-sovellusliittymän luominen ilman kehystä

NodeJS-sovellusliittymän luominen ilman kehystä

Node.js on avoimen lähdekoodin JavaScript-ajonaika, joka on rakennettu Chromen v8-moottoriin, jonka avulla voit ajaa JavaScript-koodia selaimen ulkopuolella.





Sen tapahtumamalli, ekosysteemi ja nopeus ovat tehneet Node.js:sta yhden halutuimmista ja käytetyimmistä palvelinpuolen sovellusten suoritusajoista.





Useimmat Node.js API -palvelimet käyttävät Expressiä tai muuta kehystä. Voit kuitenkin myös luoda yksinkertaisen Node.js-sovellusliittymän ilman kehystä vain muutamassa vaiheessa.





PÄIVÄN VIDEON TEKEMINEN

Vaihe 1: Kehitysympäristön määrittäminen

Luo projektihakemisto ja CD siihen juoksemalla:

mkdir nodejs-api 
cd nodejs-api

Seuraavaksi alusta npm projektissasi suorittamalla:



npm init -y 

Tässä CRUD-sovellusliittymässä käytetään MongoDB:tä, NoSQL-tietokantaa, ja sen suosittua ODM:ää, mongoosea.

Suorita seuraava komento asentaaksesi mungo :





npm install mongoose 

Luo seuraavaksi a server.js tiedosto projektisi juurihakemistoon ja luo palvelin lisäämällä alla oleva koodilohko:

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

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

Tämä koodilohko tuo http-moduulin, Node.js-ydinmoduulin. http-moduuli mahdollistaa Node.js:n tiedonsiirron HTTP:n kautta. Tämä moduuli sisältää palvelimen luomiseen tarvittavat menetelmät.





Seuraavaksi se kutsuu http-moduulia createServer menetelmä, joka luo ja palauttaa palvelimen ilmentymän. The createServer menetelmä ottaa takaisinsoittofunktion, jossa on pyyntö- ja vastausobjekti parametreina.

Seuraavaksi koodi kutsuu kuunnella menetelmä palautetussa palvelinesiintymässä. Tämän avulla palvelin voi alkaa kuunnella liikennettä tietyssä portissa. The kuunnella menetelmä käynnistää takaisinkutsun – toisen argumentin – kun se onnistuu.

Luo lopuksi kaksi hakemistoa nimeltä reitit ja mallit projektisi juurihakemistossa. The reitit kansio sisältää API:si reitityslogiikan, kun malli- sisältää kaiken tietokantaan liittyvän.

Vaihe 2: Sovelluksen yhdistäminen tietokantaan

Sisään server.js , tuonti mungo :

const mongoose = require("mongoose"); 

Soita kytkeä menetelmä päällä mungo ja välitä MongoDB URI argumenttina:

mongoose.connect("MongoDB_URI") 

Vaihe 3: API-mallin luominen

Luo CRUD API yksinkertaista blogisovellusta varten. Sinun mallit kansio, luo a blogModel.js tiedosto ja lisää seuraava koodi tiedostoosi:

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);

Yllä oleva koodilohko luo mongoose-mallin, jossa on kaksi ominaisuutta, ja kartoittaa ne MongoDB-tietokantaan.

Molemmilla tämän mallin ominaisuuksilla on a merkkijono kirjoita kanssa vaaditaan asetettu totta . Mukana olevat virheilmoitukset tulevat näkyviin, jos pyynnön runko ei sisällä kumpaakaan ominaisuuksista.

Viimeinen rivi luo ja vie mongoose-mallin kutsumalla malli- menetelmä päällä mungo. Anna mallin nimi ( Blogi ) ensimmäisenä argumenttina ja skeemana ( blogiaikataulu ) toisena argumenttina.

Vaihe 4: Reitityksen käyttöönotto sovelluksessasi

Ilman apua puitteet, kuten Express , sinun on luotava manuaalisesti logiikka, joka käsittelee jokaista API-pyyntöäsi.

Luo ensin a blogRoutes.js tiedosto omassasi reitit kansio ja tuo sitten blogimalli:

kuinka ladata video verkkosivustolta
const Blog = require("../models/blogModel"); 

Luo seuraavaksi asynkroninen reititin toiminto, pass req ja res parametreina ja vie funktio:

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

Tämä toiminto sisältää kaiken reitityslogiikkasi.

Seuraavaksi toteutat reitityslogiikan reitti reitiltä.

HANKI reitit

Lisää alla oleva koodilohko omaan reititin toiminto toteuttaa SAADA reitinkäsittelijä pyyntöjä varten /api/blogit :

//  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));
}

Yllä oleva koodilohko tarkistaa url ja menetelmä pyyntöobjektin ominaisuudet. Sitten se hakee kaikki blogit tietokannasta -sovelluksen kautta löytö menetelmä mangoosemallilla ( Blogi ).

Seuraavaksi se kutsuu kirjoituspää menetelmä päällä res , vastausobjekti. Tämä menetelmä lähettää vastauksen otsikon, jossa on kolme argumenttia: tilakoodi, valinnainen tilaviesti ja otsikot. The 200 tilakoodi edustaa onnistunutta vastausta ja tämän API-kutsun sisältötyyppi on asetettu sovellus/json .

Lopuksi sulje pyyntö varmistaaksesi, että palvelin ei jumiudu soittamalla loppu menetelmä päällä res . Kutsu osoitteeseen JSON.stringify muuntaa blogeja vastustaa JSON-merkkijonoa ja välittää sen loppu menetelmä palauttaa sen vastauskappaleena.

Lisää alla oleva koodilohko omaan reititin toiminto toteuttaa SAADA yhden resurssin reitinkäsittelijä:

kuinka viedä sähköpostit Outlookista
// 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 }));
}
}

Tämä koodi käyttää ottelu menetelmä, joka ottaa regex-lausekkeen argumenttina tarkistaakseen, vastaako URL muotoa: /api/blogs/ .

Pura seuraavaksi id omaisuutta url merkkijonoa kutsumalla sitä jakaa menetelmä. Tämä menetelmä ottaa kuvion argumenttina ( / ), jakaa merkkijonon kuvion perusteella ja palauttaa taulukon. Tämän taulukon kolmas elementti on id .

Hae lopuksi asiakirja, jossa on vastaavuus id tietokannastasi. Jos se on olemassa, lähetä a vastauskoodi 200 , sulje pyyntö ja lähetä haettu blogi. Jos sitä ei ole, anna virheilmoitus ja lähetä se vastauksena catch-lohkoon.

POST-reitti

Lisää alla oleva koodilohko reititintoimintoon toteuttaaksesi LÄHETTÄÄ reitin käsittelijä:

// 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);
}
}

Pyyntöobjekti toteuttaa Node.js ReadableStream käyttöliittymä. Tämä virta lähettää a tiedot ja an loppu tapahtuma, joka antaa sinulle pääsyn pyyntöelimen tietoihin.

Tämä koodi kuuntelee datatapahtumaa ja käsittelee sen muuntamalla sen merkkijonoksi ja ketjuttamalla sen kehon muuttuja. Vuonna loppu tapahtumakäsittelijä, se luo a Blogi esimerkki jäsennnetyn runkomerkkijonon kanssa. Sitten se tallentaa uuden blogin, lähettää tilakoodin ja sisällön otsikon ja sulkee pyynnön.

PUT Reitti

Lisää alla oleva koodilohko reititintoimintoon toteuttaaksesi LAITTAA reitin käsittelijä:

// 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-pyyntökäsittelijä on lähes identtinen LÄHETTÄÄ pyyntökäsittelijä, paitsi että se purkaa id omaisuutta url päivittääksesi asianmukaista blogia.

POISTA reitti

Lisää alla oleva koodilohko reititintoimintoosi toteuttaaksesi POISTAA reitin käsittelijä:

// 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 }));
}
}

Tämä koodilohko purkaa id alkaen url , poistaa vastaavan asiakirjan id , lähettää tilakoodin ja otsikot ja sulkee pyynnön.

Lopuksi tuonti reititin sinun server.js tiedosto ja soita reititin toiminto, ohittaminen req ja res argumentteina:

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

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

Näin palvelimesi voi siepata ja käsitellä pyyntöjä asianmukaisesti.

Löydät valmiin projektin tästä GitHub-arkisto .

Node.js-kehyksen käyttäminen

Vaikka web-sovellusliittymä on mahdollista luoda käsin, se voi olla vaikea tehtävä. Sinun on varmistettava, että olet peittänyt useita reunakoteloita ja että koodisi on parempi olla virheetön.

Vuosien varrella kehittäjät ovat rakentaneet kehyksiä, kuten ExpressJS, NestJS, Fastify jne., tehdäkseen siitä paljon helpompaa.