המדריך השלם למסגרות Node.js

Node.js הוא זמן ריצה של JavaScript, שנבנה על מנוע ה- JavaScript של V8 של Chrome, המתאים ליישום יישומי שולחן עבודה ושרת. Node.js משתמש במודל קלט / פלט מונע אירועים, שאינו חוסם, ההופך אותו לקל משקל ויעיל בהשוואה לשרתי הברגה, כמו אפאצ'י, IIS ושרת Java האופייני שלך.

בעוד שאתה יכול ליישם שרת אינטרנט או אפליקציה לחלוטין בקוד Node.js רגיל, מסגרת יכולה להפחית במידה ניכרת את כמות הקוד שאתה צריך לכתוב. במדריך זה אנו סוקרים את מכלול המסגרות הזמין למפתח Node.js.

אנחנו מתחילים במסגרות כמו סינטרה מינימליסטיות כמו Express, עוברות למסגרות דומות יותר של Rails כמו Sails.js, ואז למסגרות מלאות עם ספריות פיגומים והתמדה כמו Meteor. לבסוף, אנו מכסים את מסגרות ה- REST API כגון LoopBack, וכמה ספריות "אחרות" למטרות הנמצאות מחוץ לקטגוריות העיקריות שלנו (כמו ORM, IoT ויצירת אתרים סטטיים).

שים לב שהסיווגים אינם מופרדים היטב. ישנן מספר מסגרות שיכולות להיחשב כשייכות למספר קטגוריות.

שים לב שיש יותר פרויקטים של Node.js MVC ממה שרשמתי כאן. בחלק מהמקרים ביטלתי פרויקטים שכבר אינם פעילים. באחרים ביטלתי מסגרות שמעולם לא עוררו עניין משמעותי במפתח למרות פעילות מתמשכת. המטרה שלי היא לא לספר לך על כל פרויקט אפשרי, אלא לעזור לך לזהות פרויקטים שעשויים להיות שווים את זמן ההערכה שלך.

מסגרות MVC עבור Node.js

MVC (בקר-מודל-תצוגה) הוא פרדיגמה שנועדה לחלק את הפונקציונליות של שולחן העבודה או יישום האינטרנט בצורה נקייה. המודל מנהל את מבנה הנתונים הבסיסי. התצוגה מנהלת את מה שמוצג למשתמש. והבקר מנהל את מה שקורה בתגובה לבקשות המשתמש.

Rails היא מסגרת אינטרנטית מבוססת MVC מבוססת-מלא, שנוצרה בשנת 2004 על ידי דייוויד היינמאייר הנסון (המכונה DHH) כדי לתת לרובי דרך ליצור נוכחות באינטרנט. Rails מניח שאתה משתמש במסד נתונים, מוסכם ערכים על פני תצורה, ומאזניים היטב. מסגרות ה- MVC של Node.js דומות למסילות הן אלה הכוללות תכונות מלאות.

סינטרה היא מסגרת אינטרנטית מבוססת MVC פחות בסיסית, שנוצרה בשנת 2007 על ידי בלייק מיזרני ונשמרת כיום על ידי קונסטנטין האזה. סינטרה נקטה בגישה ההפוכה של Rails בכך שיש לה רק את מה שאתה צריך עבור יישום אינטרנט, בעצם מסלולים להצבת האפליקציה שלך באינטרנט עם DSL (שפה ספציפית לתחום) מעל שכבת "מתלה". Rack הוא שכבת הפשטה המבוססת על Node.js EventEmitter, ומספק דרך פשוטה להתמודד עם תמיכה באשכולות.

מסגרות ה- MVC של Node.js דומות לסינטרה הן אלה שמתחילות פשוטות ומאפשרות להוסיף רכיבים לפי הצורך. רבים ממסגרות ה- MVC הדומות ל- Sinatra, למעשה, מעריכות קונבנציונליות על פני תצורה, כך שהקו בין אלה למסגרות דומות למסילות אינו תמיד ברור.

סרטון קשור: טיפים וטריקים של Node.js

בסרטון ההסבר הזה, למדו כמה טכניקות שיכולות לשפר את חווית פיתוח הצומת שלכם.

מסגרות MVC דומות לסינטרה עבור Node.js

דִיאֵטָה

דיאטה מחייבת את עצמה כמסגרת אינטרנט זעירה ומודולרית של Node.js, הטובה לייצור אפליקציות ומהירות מדרגיות מהירות. שרת דיאט בסיסי נראה הרבה כמו שרת אקספרס בסיסי:

// צור אפליקציה

  var server = דורש ('דיאט')

  app app = שרת ()

  app.listen ('// localhost: 8000')

// כאשר מתבקש // localhost: 8000 /, השב עם "שלום עולם!"

  app.get ('/', פונקציה ($) {

  $ .end ('שלום עולם!')

  })

לדיאט יש מבנה התומך באירוח וירטואלי ללא כל מודול או תצורה נוספת. מופעי שרת דיאט מתפקדים כמארחים וירטואליים. רק שהן יקשיבו ביציאות שונות.

ניתוב בתזונה לא רק מטפל בנתיבים ספציפיים עם פונקציות אנונימיות, כמו app.get()בדוגמה לעיל, אלא יכול גם ליצור צינור של תוכנת ביניים:

// רשום פונקציות תוכנת ביניים לנתיב ההעלאה

  app.post ('/ העלאה / תמונה', העלאה, חיתוך, שמירה, סיום)

יש Node.js כברירת מחדל שני טיעונים, requestוכן response, בעת יצירת שרת HTTP (ים) באמצעות http.createServer(). דיאט משלב את שני האובייקטים הללו לאובייקט אות יחיד המיוצג על ידי סימן דולר $. ניתן לראות app.get()במדגם לעיל כי אובייקט האות הוא הטיעון לפונקציה המטפלת getבבקשות בנתיב השורש. דיאט תומך גם במודולי Node.js ויכול להשתמש בהם כתוכנת ביניים, כפי שמוצג app.post()בדוגמה לעיל.

אֶקְסְפּרֶס

אקספרס היא מסגרת יישומי אינטרנט של Node.js מינימלית וגמישה, המספקת קבוצה חזקה של תכונות לבניית יישומי אינטרנט בודדים, מרובי עמודים והיבריד. ממשק ה- API של אקספרס עוסק ביישום האינטרנט, בקשות ותגובות HTTP, ניתוב ותוכנות ביניים. נכון לאקספרס 4.x, תוכנת התיווך הנתמכת עבור אקספרס שוכנת במספר מאגרים נפרדים, המופיעים ברשימת המחברים של Connect.

כמה מזלגות ותוספות של אקספרס צצו, כולל קטר, האפי וקואה. קואה נוצר על ידי אחד התורמים העיקריים לאקספרס.

למרות שאקספרס ישן יותר ויש לו טביעת רגל גדולה יותר בהשוואה לטבעיו, עדיין יש לו קהילה גדולה יותר ויציבות יותר מכל אחת מהן. אני כל הזמן רואה את אקספרס משולב במסגרות וכלים אחרים ללא הערה, כאילו זו הבחירה האפשרית היחידה לבניית שרת אינטרנט ב- Node.js.

// ליצור יישום אקספרס

const express = דורש ('express')

app const = express ()

app.get ('/', פונקציה (req, res) {

res.send ('שלום עולם!')

})

app.listen (3000, פונקציה () {

console.log ('דוגמה לאפליקציה מאזינים ביציאה 3000!)

})

Flatiron

Flatiron הוא חלק מחבילת הכלים Nodejitsu Node. המחברים מחשיבים את Flatiron כשני דברים: ראשית, יוזמה לבניית אוסף של כלים מנותקים ברמה גבוהה של איכות וביצועים. ושנית, מסגרת מלאה לפיתוח אפליקציות אינטרנט המארזות כלים אלה יחד כדי להקל על פיתוח יישומים איזומורפיים ומבוססים על זרם.

Flatiron הוא כמו Sinatra, כי כל מה שאתה צריך לעשות כדי להשתמש בו כשרת אינטרנט הוא requireאליו, להפעיל יישום ולהשתמש בתוספי http, להגדיר כמה מסלולים ולהפעיל את האפליקציה, כפי שמוצג בצילום המסך למטה.

חלקים אחרים של הסוויטה משלימים את הפונקציונליות של השטוח. לדוגמא ברודווי חושפת ממשק API פשוט של "תוסף", המחליף את היפוך רישום השליטה המשמש מסגרות אחרות של MVC של Node. האיחוד הוא גרעין תוכנת ביניים שנאגר / זורם היברידי, התואם לאחור עם Connect. האיחוד הוא היצירה המספקת את התוסף http.

// ליצור יישום שטוח

var flatiron = דורש ('flatiron'), 

  אפליקציה = flatiron.app;

app.use (flatiron.plugins.http);

app.router.get ('/', פונקציה () {

  this.res.writeHead (200, {'סוג תוכן': 'טקסט / רגיל'});

  this.res.end ('שלום עולם! \ n');

});

app.start (8080);

האפי

Hapi היא מסגרת ממוקדת-תצורה פשוטה לשימוש, עם תמיכה מובנית לאימות קלט, אחסון במטמון, אימות ומתקנים חיוניים אחרים לבניית יישומי אינטרנט ושירותים. Hapi מאפשר למפתחים להתמקד בכתיבת לוגיקת יישומים לשימוש חוזר באמצעות גישה מאוד מודולרית ומרשמת. Hapi פותחה על ידי Walmart Labs והיא בחירה טובה עבור צוותים גדולים ופרויקטים גדולים.

האפי נבנה במקור על גבי אקספרס, אך מאוחר יותר תוכנן מחדש להיות עצמאי. כפי שיצרו זאת, האפי נבנה מתוך רעיון שתצורה טובה יותר מקוד וכי יש לבודד את ההיגיון העסקי משכבת ​​התחבורה. בדוגמה שלהלן, שים לב עד כמה תצורה של נתיבי שרת ברורה ונקייה מופיעה בקוד.

// ליצור שרת hapi

var Hapi = דורש ('hapi');

שרת var = Hapi.Server חדש (3000);

server.route ([

  {

    שיטה: 'GET',

    נתיב: '/ api / items',

    handler: function (בקשה, תשובה) {

      תשובה ('קבל מזהה פריט');

    }

  },

  {

    שיטה: 'GET',

    נתיב: '/ api / items / {id}',

    handler: function (בקשה, תשובה) {

      תשובה ('קבל מזהה פריט:' + request.params.id);

    }

  },

קואה

Koa היא מסגרת אינטרנט חדשה יותר שתוכננה על ידי הצוות העומד מאחורי Express, אך אינה תלויה בקוד האקספרס. Koa שואפת להיות בסיס קטן יותר, אקספרסיבי וחזק יותר ליישומי אינטרנט ו- API. Koa משתמש בגנרטורים של ES6 עבור תוכנות ביניים ולא כ- call.backs של Node.js. להלן יישום Koa "שלום, עולם" המשתמש בגנרטור, שעושה yield nextכדי להעביר את השליטה לגנרטור הבא:

var koa = דורש ('koa');

var app = koa ();

// זמן תגובה x

app.use (פונקציה * (הבא) {

  var start = תאריך חדש;

  תשואה הבאה;

  var ms = תאריך חדש - התחלה;

  this.set ('זמן תגובה X', ms + 'ms');

});

// תגובה

app.use (פונקציה * () {

  this.body = 'שלום עולם';

});

app.listen (3000);

יש הבדל בין מחוללי תוכנת תווכה המשמשים את קואה לבין התקשרות חוזרת על פי אקספרס וקונטקט. היישום של Connect פשוט מעביר את השליטה באמצעות סדרת פונקציות עד שאחד חוזר, בעוד ש- Koa מניב "במורד הזרם" ואז השליטה זורמת חזרה "במעלה הזרם".

בדוגמה לעיל, זמן ה- x-response "עוטף" את מחולל התגובה, כאשר yield nextההצהרה מסמנת את השיחה. התשואה גמישה יותר משיחות פונקציה מפורשות, מכיוון שהיא מקלה על הכנסת גנרטור אחר לרצף, למשל לוגר אינטרנט בין הטיימר לתגובה.

קַטָר

קטר הוא מסגרת אינטרנטית עבור Node.js התומכת בתבניות MVC, מסלולים RESTful, וכינוס על תצורה (כמו Rails), תוך שילוב חלק עם כל מסד נתונים ומנוע תבניות. קטר מתבסס על Express ו- Connect.

קטר מוסיף להביע כמה מבנים דמויי רובי-על-מסילה, אותם תוכלו לראות בתמונה למטה. תצוגות קטר הן לעתים קרובות קבצי JavaScript (html.ejs) משובצים, כפי שמוצג כאן, אך קטר תומך גם בג'ייד ובמנועי התבניות התואמים האחרים עבור Express. פונקציונליות ה- REST נשלטת על ידי מסלולים, כפי שקורה בדרך כלל בשרתים מבוססי Express. אתה יכול להשתמש בכל מסד נתונים ושכבת ORM שתרצה באמצעות קטר. המדריך מדגים שימוש ב- MongoDB עם Mongoose, כמו גם שימוש ב- Passport לאימות משתמשים.

Total.js

Total.js היא מסגרת מלאה של צד השרת עבור Node.js, כתובה ב- JavaScript טהור, בדומה ל- Laravel של PHP או ל- Django של Python. פלטפורמת Total.js היא אוסף של ספריות, חבילות ומוצרים שהושלמו שנבנו עם Total.js.

Total.js דומה יותר לסינטרה מאשר למסילה בכך שהוא מודולרי ומכיוון שהוא אגנוסטי לגבי IDE, מסדי נתונים ומסגרות בצד הלקוח. ניתן ליישם שרת אינטרנט מינימלי של Total.js עם הקוד הבא:

דורש ('total.js');

F.route ('/', פונקציה () {

    this.plain ('total.js ממש טוב!');

});

F.http ('ניפוי באגים');

סרטון קשור: טיפים וטריקים של Node.js

מסגרות MVC דמויות מסילות עבור Node.js

אדוניס

אדוניס היא מסגרת MVC עבור Node.js הבנויה סביב מקרי שימוש מעשיים. הוא תומך בהזרקת תלות ובעל מיכל IoC רזה (היפוך שליטה) שיעזור לך לפתור וללעוג לתלות. אדוניס מספקת כלי CLI לפיגום וליצור פרויקט עם כל התלות הנדרשת.

בין המאפיינים של אדוניס ניתן לממש יישום ORM (Lucid) של דפוס עיצוב התקליטים הפעיל; שכבת אימות המשולבת בהפעלות, JWT, אימות בסיסי ואסימונים API אישיים; והטמעה של בקרים כשיעורי ES2015. גנרטורים ES2015 מבטלים את השיחות החוזרות המבולבלות הנפוצות ב- JavaScript ישן יותר. הקוד הבא מביא את כל המשתמשים ממסד הנתונים ומחזיר אותם כ- JSON:

נתיב קונסט = שימוש ('מסלול')

משתמש const = השתמש ('אפליקציה / דגם / משתמש')

Route.get ('/', פונקציה * (בקשה, תגובה) {

  משתמשים קבועים = תניב User.all ()

  response.json (משתמשים)

})

CompoundJS

הנוסחה מאחורי CompoundJS היא Express + מבנה + הרחבות. כאן המבנה הוא הפריסה הסטנדרטית של ספריות, וההרחבות הן מודולי Node.js המוסיפים פונקציונליות למסגרת. המטרה היא לספק ממשק ברור ומאורגן לפיתוח אפליקציות תואם אקספרס. המשמעות היא שכל מה שעובד עם Express יעבוד עם CompoundJS.

ניתן ליצור אפליקציות שלד CompoundJS מה- CLI:

npm להתקין מתחם -g

מתחיל init todo-list-app

cd todo-list-app && npm להתקין

צומת.

האתר מקשיב ב // localhost: 3000 / כברירת מחדל. אתה יכול להמשיך להוסיף פיגומים על פי הדגמים עם compound generate scaffoldהפקודה.

גדי

מסגרת גדי מיישמת את MVC עבור Node.js באופן דמוי מסילה במיוחד, עד למבנה הספריה, היכולת לפתוח קונסולת REPL בהקשר של האפליקציה, וסקריפט של מחולל שבו תוכלו להשתמש כדי ליצור אפליקציות, משאבים פיגומים, או מודלים ובקרים חשופים. לפיגום ניתן ליצור תבניות EJS, ג'ייד, כידון, שפם וסוויג.

geddy jakeפקוד יכולה לרוץ שונות ג'ייק (JavaScript makeמשימות) בהקשר של האפליקציה הנוכחית, עם גישה מלאה הדגמים. זה שימושי למשימות נלוות כגון בדיקה, אתחול מסד הנתונים של הפיתוח ורישום מסלולים.

קראקן

Kraken, פרויקט קוד פתוח של PayPal, הוא שכבה מאובטחת וניתנת להרחבה המרחיבה את אקספרס על ידי מתן מבנה וכינוס, בדומה לקטר. אף על פי שקראקן הוא הנדבך העיקרי במסגרתו, ניתן להשתמש במודולים הבאים גם באופן עצמאי: Lusca (אבטחה), Kappa (NPM Proxy), Makara (LinkedIn Dust.js i18N), ו- Adaro (LinkedIn Dust.js תבנית).