התחלת פרוייקט ב-Node
העבודה עם MongoDB תהיה בדרך כלל מתוך אפליקציה. לכל סביבה יש driver אחר שמאפשר עבודה איתה. את רשימת הדרייברים אפשר למצוא בעמוד הדרייברים של MongoDB. נבוד עם החיבור של NodeJS כי זאת הדוגמא שנראה בהמשך. נדרש פה ידע ב-node.
כדי להתחבר ל-MongoDB ניצור פרוייקט node חדש.
npm init
ניצור קובץ כניסה לתוכנית בשם app.js.
נתקין את express בפרוייקט,
npm install express --save
נקרא ל-express נאתחל את הפרוייקט וניצור נתיב get לקבל מידע.
קובץ app.js
const express = require('express');
// init app and middleware
const app = express();
// listen for requests
app.listen(3000, () => {
console.log("app on port 3000");
})
// routes
app.get('/books', (req, res) => {
res.json({msg: "Welcome to the api"});
})
כדי לא להתחיל את הסרבר מחדש בכל פעם שמריצים את התוכנית, נתקין את nodemon.
npm install -g nodemon
ונריץ את התוכנית דרך nodemon
nodemon app.js
אם נלך לכתובת: http://localhost:3000/books נראה בחזרה את ה-Json ששלחנו. בהמשך כמובן שהקישור אמור להוביל למאגר הנתונים ב-MongoDB ולהביא לנו את המידע משם.
השלב הבא יהיה להתקין את הדרייבר של MongoDB עבור Node.
npm install mongodb --save
Connecting to MongoDB
עכשיו אנחנו רוצים להתחבר ל-MongoBD על מנת לעבוד עם המידע שבו.
ניצור קובץ db.js בקובץ הזה ניצור פונקציה שמייצרת את החיבור לסרבר של ה-DB ואחת שתחזיר את החיבור ל-DB. עבור יצירת הקישור ל-DB נשתמש בכתובת mongodb://localhost:27017/bookstor הסטנדרטית ל-DB המאוחסן על המחשב ובסיום שם ה-DB.
פעולת החיבור היא א-סינכרונית ומחזירה promise.
לפונקציה connerctToDb נשלח בהמשך פונקציית callback בשם cb ואותה אנחנו רוצים להפעיל אחרי יצירת החיבור.
קובץ db.js
const { MongoClient } = require('mongodb')
let dbConnection;
module.exports = {
connerctToDb: (cb) => {
MongoClient.connect('mongodb://localhost:27017/bookstore')
.then((client) => {
dbConnection = client.db()
return cb();
}).catch(error => {
console.log(error);
return cb(error);
});
},
getDb: () => dbConnection
}
נחזור לקובץ app להביא את החיבורים שיצרנו.
אם החיבור היה מוצלח, אנחנו רוצים להתחיל להאזין ל-express, אבל אם יש שגיאה אנחנו לא רוצים לעשות את זה כי לא נוכל לעבד את הבקשות. בסיום יש לנו יצירה של אובייקט db שאיתו נוכל לפנות ב-end points לפנייה ל-DB.
קובץ app.js
const express = require('express');
const { connerctToDb, getDb } = require('./db')
// init app and middleware
const app = express();
let db;
connerctToDb((error) => {
if(!error){
// listen for requests
app.listen(3000, () => {
console.log("app on port 3000");
})
db = getDb();
}
});
// routes
app.get('/books', (req, res) => {
res.json({msg: "Welcome to the api"});
})