Το 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 εγκαθιστώ μαγκούστα

Στη συνέχεια, δημιουργήστε ένα server.js αρχείο στον ριζικό κατάλογο του έργου σας και προσθέστε το μπλοκ κώδικα παρακάτω για να δημιουργήσετε έναν διακομιστή:

instagram viewer
συνθ http = απαιτώ("http");
συνθ διακομιστής = http.createServer((req, res) => {});

server.listen (3000, () => {
κονσόλα.κούτσουρο("Ο διακομιστής λειτουργεί".);
});

Αυτό το μπλοκ κώδικα εισάγει τη λειτουργική μονάδα http, μια βασική λειτουργική μονάδα Node.js. Η λειτουργική μονάδα http επιτρέπει στο Node.js να μεταφέρει δεδομένα μέσω HTTP. Αυτή η ενότητα περιέχει τις μεθόδους που απαιτούνται για τη δημιουργία ενός διακομιστή.

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

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

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

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

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

συνθ μαγκούστα = απαιτώ("μαγκούστα");

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

mongoose.connect("MongoDB_URI")

Βήμα 3: Δημιουργία μοντέλου API

Δημιουργήστε ένα CRUD API για μια απλή εφαρμογή ιστολογίου. Στο δικό σου μοντέλα φάκελο, δημιουργία α blogModel.js αρχείο και προσθέστε τον ακόλουθο κώδικα στο αρχείο σας:

συνθ μαγκούστα = απαιτώ("μαγκούστα");
συνθ blogSchema = μαγκούστα. Σχήμα({
τίτλος: {
τύπος: Σειρά,
απαιτείται: [αλήθεια, "Το ιστολόγιο πρέπει να έχει τίτλο"],
},
σώμα: {
τύπος: Σειρά,
απαιτείται: [αλήθεια, "Το blog πρέπει να έχει σώμα"],
},
});
μονάδα μέτρησης.εξαγωγές = mongoose.model("Blog", blogSchema);

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

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

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

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

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

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

συνθ Blog = απαιτώ("../models/blogModel");

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

συνθ δρομολογητής = ασυγχρονισμόςλειτουργία (απαίτηση, ανάλογ) {};
μονάδα μέτρησης.εξαγωγές = δρομολογητής;

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

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

GET Routes

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

// GET: /api/blogs
εάν (req.url "/api/blogs"&& απαίτηση.μέθοδος "ΠΑΙΡΝΩ") {
// λήψη όλων των ιστολογίων
συνθ ιστολόγια = αναμένω Blog.find();

// σειρά ο κατάσταση κώδικας καιπεριεχόμενο-τύπος
res.writeHead (200, { "Τύπος περιεχομένου": "εφαρμογή/json" });

// αποστολή δεδομένων
res.τέλος(JSON.στριμώγω(ιστολόγια));
}

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

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

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

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

// GET: /api/blogs/:id
if (req.url.match(/\\/api\\/blogs\\/([0-9]+)/) && απαίτηση.μέθοδος "ΠΑΙΡΝΩ") {
προσπαθήστε {
// εξαγωγή αναγνωριστικού από το url
const id = req.url.split("/")[3];

// λήψη ιστολογίου από το DB
συνθ blog = αναμένω Blog.findById (id);

αν (ιστολόγιο) {
res.writeHead (200, { "Τύπος περιεχομένου": "εφαρμογή/json" });
res.τέλος(JSON.στριμώγω(blog));
} αλλού {
βολήνέοςΛάθος("Το ιστολόγιο δεν υπάρχει");
}
} σύλληψη (λάθος) {
res.writeHead (404, { "Τύπος περιεχομένου": "εφαρμογή/json" });
res.τέλος(JSON.στριμώγω({ μήνυμα: λάθος }));
}
}

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

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

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

Διαδρομή POST

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

// ΑΝΑΡΤΗΣΗ: /api/blogs/
εάν (req.url "/api/blogs"&& απαίτηση.μέθοδος "ΘΕΣΗ") {
προσπαθήστε {
ας σώμα = "";

// Ακρόαση για συμβάν δεδομένων
req.on("δεδομένα", (κομμάτι) => {
body += chunk.toString();
});

// Ακούστε για τέλοςΕκδήλωση
req.on("τέλος", ασύγχρονο () => {
// Δημιουργία ιστολογίου
αφήνω blog = νέος Ιστολόγιο(JSON.ανάλυση (σώμα));

// Αποθήκευση στο DB
αναμένω blog.save();
res.writeHead (200, { "Τύπος περιεχομένου": "εφαρμογή/json" });
res.τέλος(JSON.στριμώγω(blog));
});
} σύλληψη (λάθος) {
κονσόλα.log (σφάλμα);
}
}

Το αντικείμενο αίτησης υλοποιεί το Node.js ReadableStream διεπαφή. Αυτό το ρεύμα εκπέμπει α δεδομένα και ένα τέλος συμβάν που σας δίνει πρόσβαση σε δεδομένα από το σώμα αιτήματος.

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

Διαδρομή PUT

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

// PUT: /api/blogs/:id
if (req.url.match(/\\/api\\/blogs\\/([0-9]+)/) && απαίτηση.μέθοδος "ΒΑΖΩ") {
προσπαθήστε {
// εξαγωγή αναγνωριστικού από το url
const id = req.url.split("/")[3];
ας σώμα = "";

req.on("δεδομένα", (κομμάτι) => {
body += chunk.toString();
});
req.on("τέλος", ασύγχρονο () => {
// Βρείτε και εκσυγχρονίζωέγγραφο
αφήνω updatedBlog = αναμένω Blog.findByIdAndUpdate (αναγνωριστικό, JSON.parse (σώμα), {
νέος: αληθής,
});

res.writeHead (200, { "Τύπος περιεχομένου": "εφαρμογή/json" });
res.τέλος(JSON.στριμώγω(ενημερωμένο Blog));
});
} σύλληψη (λάθος) {
κονσόλα.log (σφάλμα);
}
}

Ο χειριστής αιτημάτων PUT είναι σχεδόν πανομοιότυπος με τον ΘΕΣΗ χειριστής αιτημάτων, εκτός από το ότι εξάγει το ταυτότητα ιδιοκτησία από το url για ενημέρωση του σχετικού ιστολογίου.

ΔΙΑΓΡΑΦΗ Διαδρομής

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

// ΔΙΑΓΡΑΦΩ: /api/blogs/:ταυτότητα
if (req.url.match(/\\/api\\/blogs\\/([0-9]+)/) && απαίτηση.μέθοδος "ΔΙΑΓΡΑΦΩ") {
προσπαθήστε {
const id = req.url.split("/")[3];

// Διαγράφω blog από DB
αναμένω Blog.findByIdAndDelete (αναγνωριστικό);
res.writeHead (200, { "Τύπος περιεχομένου": "εφαρμογή/json" });
res.end (JSON.stringify({ μήνυμα: "Το ιστολόγιο διαγράφηκε με επιτυχία" }));
} σύλληψη (λάθος) {
res.writeHead (404, { "Τύπος περιεχομένου": "εφαρμογή/json" });
res.τέλος(JSON.στριμώγω({ μήνυμα: λάθος }));
}
}

Αυτό το μπλοκ κώδικα εξάγει το ταυτότητα από το url, διαγράφει το έγγραφο με την αντιστοίχιση ταυτότητα, στέλνει τον κωδικό κατάστασης και τις κεφαλίδες και κλείνει το αίτημα.

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

συνθ δρομολογητής = απαιτώ("./routes/blogRoutes");

συνθ διακομιστής = http.createServer((req, res) => {
δρομολογητής (απαιτ., res);
});

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

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

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

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

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