Πώς να δημιουργήσετε ένα NodeJS API χωρίς τη χρήση πλαισίου

Πώς να δημιουργήσετε ένα NodeJS API χωρίς τη χρήση πλαισίου

Το Node.js είναι ένας χρόνος εκτέλεσης JavaScript ανοιχτού κώδικα που βασίζεται στη μηχανή v8 του chrome που σας επιτρέπει να εκτελείτε κώδικα JavaScript εκτός προγράμματος περιήγησης.





Το μοντέλο συμβάντων, το οικοσύστημα και η ταχύτητά του έχουν κάνει το Node.js έναν από τους πιο περιζήτητους και χρησιμοποιούμενους χρόνους εκτέλεσης για εφαρμογές διακομιστή.





Οι περισσότεροι διακομιστές API Node.js χρησιμοποιούν Express ή άλλο πλαίσιο. Ωστόσο, μπορείτε επίσης να δημιουργήσετε ένα απλό Node.js API χωρίς πλαίσιο σε λίγα μόνο βήματα.





ΚΑΤΑΣΚΕΥΗ ΒΙΝΤΕΟ ΤΗΣ ΗΜΕΡΑΣ

Βήμα 1: Ρύθμιση του αναπτυξιακού σας περιβάλλοντος

Δημιουργήστε έναν κατάλογο έργου και CD σε αυτό τρέχοντας:

mkdir nodejs-api 
cd nodejs-api

Στη συνέχεια, αρχικοποίηση npm στο έργο σας εκτελώντας:



npm init -y 

Αυτό το CRUD API θα διαθέτει τη χρήση του MongoDB, μιας βάσης δεδομένων NoSQL, και του δημοφιλούς ODM, του mongoose.

Εκτελέστε την ακόλουθη εντολή για εγκατάσταση μαγκούστα :





npm install mongoose 

Στη συνέχεια, δημιουργήστε ένα server.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 δημιουργία διακομιστή μέθοδο που δημιουργεί και επιστρέφει μια παρουσία ενός διακομιστή. ο δημιουργία διακομιστή Η μέθοδος παίρνει μια συνάρτηση επανάκλησης με ένα αντικείμενο αίτησης και απάντησης ως παραμέτρους.

Στη συνέχεια, ο κωδικός καλεί το ακούω μέθοδος στην παρουσία διακομιστή που επιστράφηκε. Αυτό επιτρέπει στον διακομιστή να αρχίσει να ακούει για κίνηση στη δεδομένη θύρα. ο ακούω Η μέθοδος ενεργοποιεί μια επανάκληση - το δεύτερο όρισμα - όταν πετύχει.

τα παράθυρα δεν μπορούσαν να εντοπίσουν αυτόματα τις ρυθμίσεις διακομιστή μεσολάβησης αυτού του δικτύου windows 7

Τέλος, δημιουργήστε δύο καταλόγους με όνομα διαδρομές και μοντέλα στον ριζικό κατάλογο του έργου σας. ο διαδρομές φάκελος θα περιέχει τη λογική δρομολόγησης για το API σας, ενώ μοντέλο θα περιέχει όλα όσα σχετίζονται με τη βάση δεδομένων.

Βήμα 2: Σύνδεση της εφαρμογής σας σε μια βάση δεδομένων

Σε server.js , εισαγωγή μαγκούστα :

const mongoose = require("mongoose"); 

Τηλεφώνησε στο συνδέω-συωδεομαι μέθοδος για μαγκούστα και περάστε το MongoDB URI σας ως όρισμα:

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

Το μπλοκ κώδικα παραπάνω δημιουργεί ένα μοντέλο mongoose με δύο ιδιότητες και τις αντιστοιχίζει σε μια βάση δεδομένων MongoDB.

Και οι δύο ιδιότητες σε αυτό το μοντέλο έχουν α Σειρά πληκτρολογήστε με απαιτείται οριστεί σε αληθής . Τα συνοδευτικά μηνύματα σφάλματος θα εμφανιστούν εάν ένα σώμα αιτήματος δεν περιέχει καμία από τις ιδιότητες.

Η τελική γραμμή δημιουργεί και εξάγει ένα μοντέλο μαγκούστας καλώντας το μοντέλο μέθοδος για μαγκούστα. Περάστε το όνομα μοντέλου ( Ιστολόγιο ) ως πρώτο όρισμα και σχήμα ( Πρόγραμμα blog ) ως δεύτερο επιχείρημα.

Βήμα 4: Εφαρμογή της δρομολόγησης στην εφαρμογή σας

Χωρίς τη βοήθεια του πλαίσια όπως το Express , θα πρέπει να δημιουργήσετε με μη αυτόματο τρόπο τη λογική για να χειριστείτε κάθε αίτημα που υποβάλλεται στο API σας.

Πρώτα, δημιουργήστε ένα blogRoutes.js αρχείο στο δικό σας διαδρομές φάκελο και, στη συνέχεια, εισαγάγετε το μοντέλο ιστολογίου:

const Blog = require("../models/blogModel"); 

Στη συνέχεια, δημιουργήστε ένα ασύγχρονο δρομολογητή λειτουργία, πέρασμα απαίτηση και res ως παραμέτρους και εξάγετε τη συνάρτηση:

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

Αυτή η συνάρτηση θα περιέχει όλη τη λογική δρομολόγησης σας.

Στη συνέχεια, θα εφαρμόσετε τη λογική δρομολόγησης διαδρομή προς διαδρομή.

GET Routes

Προσθέστε το μπλοκ κώδικα παρακάτω στο δικό σας δρομολογητή λειτουργία για την υλοποίηση του ΠΑΙΡΝΩ χειριστής διαδρομής για αιτήματα που υποβάλλονται σε /api/ιστολόγια :

//  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 και μέθοδος ιδιότητες του αντικειμένου αιτήματος. Στη συνέχεια ανακτά όλα τα ιστολόγια από τη βάση δεδομένων μέσω του εύρημα μέθοδος στο μοντέλο μαγκούστας ( Ιστολόγιο ).

Στη συνέχεια, καλεί το writeHead μέθοδος για res , το αντικείμενο απόκρισης. Αυτή η μέθοδος στέλνει μια κεφαλίδα απάντησης με τρία ορίσματα: έναν κωδικό κατάστασης, ένα προαιρετικό μήνυμα κατάστασης και κεφαλίδες. ο 200 Ο κωδικός κατάστασης αντιπροσωπεύει μια επιτυχημένη απόκριση και ο τύπος περιεχομένου για αυτήν την κλήση API έχει οριστεί σε εφαρμογή/json .

Τέλος, κλείστε το αίτημα για να βεβαιωθείτε ότι ο διακομιστής δεν κολλάει καλώντας το τέλος μέθοδος για res . Η κλήση προς JSON.stringify μετατρέπει το ιστολόγια αντικείμενο σε μια συμβολοσειρά JSON και μεταβίβασή της στο τέλος Η μέθοδος το επιστρέφει ως σώμα απόκρισης.

πώς να απαλλαγείτε από επιπλέον σελίδα στο word

Προσθέστε το μπλοκ κώδικα παρακάτω στο δικό σας δρομολογητή λειτουργία για την υλοποίηση του ΠΑΙΡΝΩ Διαχειριστής διαδρομής για έναν μόνο πόρο:

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

Αυτός ο κώδικας χρησιμοποιεί το αγώνας μέθοδος, η οποία λαμβάνει μια έκφραση regex ως όρισμα, για να ελέγξει εάν το url ταιριάζει με τη μορφή: /api/blogs/ .

Στη συνέχεια, εξαγάγετε το ταυτότητα ιδιοκτησία από το url συμβολοσειρά καλώντας της διαίρεση μέθοδος. Αυτή η μέθοδος παίρνει ένα μοτίβο ως όρισμα ( / ), χωρίζει τη συμβολοσειρά με βάση το μοτίβο και επιστρέφει έναν πίνακα. Το τρίτο στοιχείο αυτού του πίνακα είναι το ταυτότητα .

Τέλος, ανακτήστε το έγγραφο με την αντιστοίχιση ταυτότητα από τη βάση δεδομένων σας. Εάν υπάρχει, στείλτε ένα κωδικός απάντησης 200 , κλείστε το αίτημα και στείλτε το ανακτηθέν ιστολόγιο. Εάν δεν υπάρχει, ρίξτε ένα σφάλμα και στείλτε το ως απάντηση στο μπλοκ catch.

Διαδρομή POST

Προσθέστε το μπλοκ κώδικα παρακάτω στη λειτουργία του δρομολογητή σας για να το εφαρμόσετε ΘΕΣΗ χειριστής διαδρομής:

// 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

Προσθέστε το μπλοκ κώδικα παρακάτω στη λειτουργία του δρομολογητή σας για να το εφαρμόσετε ΒΑΖΩ χειριστής διαδρομής:

// 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 , διαγράφει το έγγραφο με την αντιστοίχιση ταυτότητα , στέλνει τον κωδικό κατάστασης και τις κεφαλίδες και κλείνει το αίτημα.

Τέλος, εισαγωγή δρομολογητή στο δικό σου server.js αρχείο και καλέστε σας δρομολογητή λειτουργία, πέρασμα απαιτ και res ως επιχειρήματα:

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

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

Αυτό επιτρέπει στον διακομιστή σας να παρακολουθεί και να χειρίζεται κατάλληλα αιτήματα.

Μπορείτε να βρείτε το ολοκληρωμένο έργο σε αυτό Αποθετήριο GitHub .

Χρησιμοποιώντας ένα πλαίσιο Node.js

Παρόλο που είναι δυνατό να δημιουργήσετε ένα web API με το χέρι, μπορεί να είναι μια δύσκολη εργασία. Θα πρέπει να βεβαιωθείτε ότι έχετε καλύψει πολλές περιπτώσεις άκρων και καλύτερα ο κώδικάς σας να είναι χωρίς σφάλματα.

Με τα χρόνια, οι προγραμματιστές έχουν δημιουργήσει πλαίσια όπως τα ExpressJS, NestJS, Fastify κ.λπ., για να το κάνουν πολύ πιο εύκολο.