دع Nodejs يركض
الخطوة الأولى هي بالطبع لتثبيت بيئة NodeJS. الآن بعد أن يحتوي Windows على تثبيت أسرع من NodeJs ، يمكنك تنزيله مباشرة:
http://www.nodejs.org/download/
قم بتنزيله حسب الحاجة. بعد اكتمال التنزيل ، ما عليك سوى الانتقال إلى الخطوة التالية. بعد ذلك ، سيكون لدينا بيئة NodeJS.
الخطوة الثانية هي ، من أجل تسهيل عملياتنا اللاحقة ، شاهدنا مباشرة مدونة مجلد على القرص D.
ثم افتح أداة سطر أوامر Windows ، وأدخل D Disk ، وأدخل:
انسخ الرمز على النحو التالي: مدونة Express -e
ثم قد تكون هناك حزم تبعية في الداخل ، نحتاج إلى إدخال دليل المدونة للتثبيت (يتم توفير تكوين التثبيت بواسطة package.json):
انسخ الرمز على النحو التالي: تثبيت NPM
وبهذه الطريقة ، نقوم بتنزيل حزمة التبعية ، والتي تعتمد على ملفات حزمة Java وملف .NET BLL يجب أن يكون مفهومًا
في هذا الوقت ، برنامجنا جاهز للتشغيل:
انسخ الرمز على النحو التالي: تطبيق العقدة
انسخ الرمز كما يلي: d:/blog> node appexpress server الاستماع على المنفذ 3000
في هذا الوقت ، سيكون لديك رد عند فتح المتصفح:
نحن هنا نستخدم Express (إطار تطوير Nodejsweb الشهير) ونستخدم محرك قالب EJS
بنية الملف
هيكل دليل ملف التهيئة كما يلي:
app.js هو ملف الدخول
package.json هو ملف الاعتماد على الوحدة النمطية. عندما نستخدم تثبيت NPM ، سيتم تنزيل الحزم ذات الصلة عبر الإنترنت وفقًا لتكوينه.
node_modules هو ملف الوحدة النمطية التي تم تنزيلها (package.json)
يخزن العام ملفات الموارد الثابتة
الطرق حفظ ملفات التوجيه
طرق عرض ملفات عرض القالب العرض المتعلق بالمتجر
وبهذه الطريقة ، يخرج هيكل الدليل الأساسي لدينا. دعنا نتحدث بإيجاز عن دليل node_modules هنا.
node_modules/ejs
قلنا للتو أن الوحدة النمطية التي تم تنزيلها يتم تخزينها هنا. لوضعها بصراحة ، إنها مجموعة من ملفات JS
نسخة الكود كما يلي:
var parse = exports.parse = function (Str ، Options) {
خيارات var = الخيارات || {}
، افتح = Options.Open || التصدير. Open || "<٪"
، أغلق = خيارات. close || التصدير "٪>"
، اسم الملف = الخيارات.
، compiledebug = Options.compiledebug! == false
، buf = "" ؛
buf += 'var buf = [] ؛' ؛
if (false! == Options._with) buf += '/nwith (السكان المحليين || {}) {(function () {' ؛
buf += '/n buf.push (/' '؛
var lineno = 1 ؛
var consumpteol = false ؛
لـ (var i = 0 ، len = str.length ؛ i <len ؛ ++ i) {
var stri = str [i] ؛
if (str.slice (i ، open.length + i) == open) {
i += open.length
var prefix ، postfix ، line = (compiLedeBug؟ '__stack.lineno =': '') + lineno ؛
التبديل (str [i]) {
الحالة '=':
البادئة = "'، الهروب ((" + line +' ، '؛
postfix = ")) ، '" ؛
++ i ؛
استراحة؛
قضية '-':
البادئة = "'، (" + line +' ، '؛
postfix = ") ، '" ؛
++ i ؛
استراحة؛
تقصير:
بادئة = "') ؛" + line + '؛' ؛
postfix = "؛ buf.push ('" ؛
}
var end = str.indexof (إغلاق ، i)
، JS = str.substring (i ، end)
، ابدأ = أنا
، تضمين = فارغ
، ن = 0 ؛
if ('-' == JS [JS.Length-1]) {
JS = JS.SubString (0 ، JS.Length - 2) ؛
المستهلك = صحيح ؛
}
if (0 == JS.Trim (). indexof ('include'))
var name = js.trim (). slice (7) .trim () ؛
إذا كان (اسم الملف) يرمي خطأً جديدًا ("خيار اسم الملف مطلوب لتضمين") ؛
var path = solveInclude (الاسم ، اسم الملف) ؛
include = read (path ، 'utf8') ؛
include = exports.parse (include ، {filename: path ، _with: false ، open: open ، elling: close ، compiledeBug: compiledeBug}) ؛
buf + = "' + (function () {" + include + "}) () +'" ؛
JS = '' ؛
}
بينما (~ (n = js.indexof ("/n" ، n))) n ++ ، lineno ++ ؛
if (js.substr (0 ، 1) == ':') js = filtered (js) ؛
إذا (JS) {
if (js.lastindexof ('//')> js.lastindexof ('/n')) js += '/n' ؛
buf += بادئة ؛
BUF += JS ؛
buf += postfix ؛
}
i + = end - start + close.length - 1 ؛
} آخر إذا (stri == "//") {
buf += "////" ؛
} آخر إذا (stri == "'') {
buf += "// '" ؛
} آخر إذا (stri == "/r") {
// يتجاهل
} آخر إذا (stri == "/n") {
إذا (المستهلك) {
المستهلك = خطأ ؛
} آخر {
buf += "// n" ؛
الكتان ++ ؛
}
} آخر {
buf += stri ؛
}
}
if (false! == Options._with) buf += "') ؛}) () ؛ /n} /nreturn buf.join (' ') ؛" ؛
آخر buf += "') ؛/nreturn buf.join (' ') ؛" ؛
إرجاع buf ؛
} ؛
تمامًا مثل قالب EJS ووحدة Express التي استخدمناها هنا ، دخلنا بعد ذلك إلى برنامج EJS بفضول لمعرفة الفرق.
بعد الافتتاح ، EJS.JS ، نرسم بعض التعليمات البرمجية لقراءة: نحن أكثر دراية بهذا الرمز. يتوافق مع رمز محرك القالب من السطح السفلي ، وكلاهما تحليل القالب في سلسلة.
ثم قم بتحويلها إلى وظيفة من خلال طريقة eval أو وظيفة جديدة ، وقم بتمريرها إلى كائن البيانات الخاص بك لتحليلها.
بالنسبة لسير العمل المحدد ، لا نعرف حتى الآن ، لذلك لا يمكننا وضعه إلا في النقطة الأخيرة للدراسة. حسنًا ، دعنا نذهب إلى وحدات أخرى الآن.
app.js
كملف إدخال ، يلعب App.js دورًا مهمًا:
نسخة الكود كما يلي:
/**
* تبعيات الوحدة النمطية.
*/
var express = require ('Express') ؛
VAR ROUTES = require ('./ ROUTES') ؛
var user = required ('./ routes/user') ؛
var http = require ('http') ؛
var path = required ('path') ؛
var app = express () ؛
// جميع البيئات
App.Set ('Port' ، Process.env.port || 3000) ؛
App.set ('Views' ، path.join (__ dirname ، 'Views')) ؛
App.set ('View Engine' ، 'EJS') ؛
app.use (express.favicon ()) ؛
app.use (express.logger ('dev')) ؛
app.use (express.json ()) ؛
app.use (express.urlencoded ()) ؛
app.use (express.methodoverride ()) ؛
app.use (app.router) ؛
app.use (express.static (path.join (__ dirname ، 'public')))) ؛
// التنمية فقط
if ('development' == app.get ('env')) {
app.use (express.errorHandler ()) ؛
}
app.get ('/' ، routes.index) ؛
app.get ('/user' ، user.list) ؛
http.createserver (app) .Listen (app.get ('port') ، function () {
console.log ('Express Server الاستماع على المنفذ' + app.get ('port')) ؛
}) ؛
نقوم بتحميل وحدات Express و HTTP من خلال الأمر require () ، وسنقوم بتحميل مستخدم الفهرس وملفات القالب الأخرى في دليل الطرق
App.Set ('Port' ، Process.env.port || 3000) هو المنفذ عند بدء التشغيل
App.set ('Views' ، __dirName + '/Views) هو المسار لتخزين ملف القالب. حيث __dirName هو متغير عالمي ، تخزين الدليل حيث يوجد البرنامج النصي الحالي. يمكننا مشاهدته بهذه الطريقة:
نسخة الكود كما يلي:
console.log (__ dirname) ؛ // index.js أضف الكود التالي
/**
D:/Blog> APP NODE
Express Server LI
D:/المدونة/الطرق
*/
أما بالنسبة لكيفية الحصول على هذا __dirname ، فإننا لا نحتاج إلى الانتباه إليه في الوقت الحالي
App.Set ('View Engine' ، 'EJS') يعين محرك القالب على eJs
App.use (express.favicon ()) هو تعيين الرمز لتعديله ، وبعد ذلك يمكنك إنشاء ملف الصور أدناه.
app.use (express.logger ('dev')) ؛ يعتمد Express على الاتصال ، وسيقوم الوسيطة المدمجة بإخراج بعض السجلات.
app.use (express.json ()) ؛ يستخدم لتحليل جسم الطلب ، حيث سيتم تحويل السلسلة ديناميكيًا إلى كائن JSON
app.use (express.methodoverride ()) ؛ قم بتوصيل البرامج الوسيطة المدمجة للتعامل
app.use (app.router) ؛ استدعاء قواعد قرار جهاز التوجيه
app.use (express.static (path.join (__ dirname ، 'public')))) ؛ قم بتوصيل البرامج الوسيطة المدمجة ، وقم بتعيين عام في دليل الجذر لتخزين الملفات الثابتة
نسخة الكود كما يلي:
if ('development' == app.get ('env')) {
app.use (express.errorHandler ()) ؛
}
هذه الجملة تعني أن معلومات الخطأ يجب إخراجها في ظل ظروف التطوير
نسخة الكود كما يلي:
app.get ('/' ، routes.index) ؛
app.get ('/user' ، user.list) ؛
هاتان الجملتان هما ملفات معالجة محددة في وقت الوصول. على سبيل المثال ، عند الوصول مباشرة إلى هنا ، يكون الوصول الافتراضي هو Routes.Index.
ثم يقوم بالفعل بتوزيع بيانات القالب في الداخل:
نسخة الكود كما يلي:
orports.index = function (req ، res) {
console.log (__ dirname) ؛
Res.Render ('index' ، {title: 'express'}) ؛
} ؛
أخيرًا ، سيتم استدعاء الرمز أعلاه لإنشاء خادم HTTP والاستماع إلى المنفذ 3000. بعد النجاح ، يمكنك الوصول إليه على صفحة الويب.
التوجيه
استخدمنا هذه الطريقة لبناء المسار
نسخة الكود كما يلي: app.get ('/' ، Routes.Index) ؛
يمكن استبدال الرمز أعلاه بهذا الرمز (مكتوب في التطبيق)
نسخة الكود كما يلي:
app.get ('/' ، function (req ، res) {
Res.Render ('index' ، {title: 'express'}) ؛
}) ؛
يعني هذا الرمز أنه عند الوصول إلى الصفحة الرئيسية ، يتم استدعاء محرك قالب EJS لتقديم ملف قالب INDEX.EJS
قم الآن بإجراء بعض التعديلات. يقوم الرمز أعلاه بتنفيذ وظيفة التوجيه ، لكن لا يمكننا وضع الكود المتعلق بالتوجيه في التطبيق. إذا كان هناك العديد من الطرق ، فسيصبح التطبيق متضخمة ، لذلك نضع التكوين ذي الصلة في الفهرس
لذا احذف وظائف التوجيه ذات الصلة في التطبيق وأضف رمزًا إلى نهاية التطبيق:
نسخة الكود كما يلي: Routes (APP) ؛
ثم تعديل index.js
نسخة الكود كما يلي:
module.exports = function (app) {
app.get ('/' ، function (req ، res) {
Res.Render ('index' ، {title: 'express'}) ؛
}) ؛
} ؛
كيف يتم تنظيم هذا الرمز ليس واضحًا بعد ، لذلك لن أهتم به بعد الآن. لنلقي نظرة عليه لاحقًا
قواعد التوجيه
يقوم Express بتغليف العديد من طلبات HTTP ، نستخدم عمومًا GET/نشر اثنين
نسخة الكود كما يلي:
app.get () ؛
app.post () ؛
المعلمة الأولى هي مسار الطلب ، والمعلمة الثانية هي وظيفة رد الاتصال ، أو المعلمتين هما طلب واستجابة
ثم ، بالنسبة ل REQ (طلب) هناك القواعد التالية
REQ.Query مقابض الحصول على طلب والحصول على معلمات الحصول على طلب
req.params مقابض /: نموذج xxx الحصول على أو طلب البريد
REQ.Body يتعامل مع طلب البريد ويحصل على هيئة طلب البريد
req.params مقابض الحصول على طلبات و Post ، ولكن أولوية البحث هي req.params-> req.body-> req.query
تدعم قواعد المسار أيضًا الانتظام ، سنتحدث عن التفاصيل لاحقًا ...
إضافة قواعد التوجيه
عندما نصل إلى رابط غير موجود:
نظرًا لعدم وجود قاعدة توجيه لـ /y ، فهو لا يقول الملف تحت الجمهور ، لذلك فهو 404
الآن نضيف المسار ذي الصلة في index.js:
نسخة الكود كما يلي:
module.exports = function (app) {
app.get ('/' ، function (req ، res) {
Res.Render ('index' ، {title: 'express'}) ؛
}) ؛
app.get ('/y' ، function (req ، res) {
Res.Send ('ye xiaochai') ؛
}) ؛
} ؛
هنا لدي صفحة مشوهة:
والسبب هو أنه بعد التنزيل ، فإن ملفي هو ترميز GBK. نحن فقط بحاجة إلى تغييره إلى UTF-8. نحن لا نهتم بمحرك القالب. دعنا نذهب إلى القسم التالي.
وظيفة التسجيل
نتبع هنا المدون الأصلي للقيام بوظيفة تسجيل بسيطة ، واستخدام Mongo DB كقاعدة بيانات ، ثم سنقوم بتحسين الوظائف بدورها
قم بإنشاء مسار تسجيل جديد وإنشاء قالب تسجيل جديد له ، لذلك لنبدأ
① إنشاء طريق جديد في الفهرس
نسخة الكود كما يلي:
app.get ('/register' ، function (req ، res) {
res.Render ('index' ، {title: 'register page'}) ؛
}) ؛
نسخة الكود كما يلي:
module.exports = function (app) {
app.get ('/' ، function (req ، res) {
Res.Render ('index' ، {title: 'express'}) ؛
}) ؛
app.get ('/y' ، function (req ، res) {
Res.Send ('ye xiaochai') ؛
}) ؛
app.get ('/register' ، function (req ، res) {
Res.Render ('register' ، {title: 'register page'}) ؛
}) ؛
نسخة الكود كما يلي:
<! doctype html>
<html>
<head>
<title> <٪ = title ٪> </title>
<Link Rel = 'Stylesheet' Href = '/STYLESHEETS/Style.CSS'/>
</head>
<body>
<h1> <٪ = title ٪> </h1>
<form method = "post">
<viv> اسم المستخدم: <إدخال نوع = "text" name = "name"/> </viv>
<div> كلمة المرور: <input type = "password" name = "password"/> </viv>
<viv> <input type = "submit" value = "login"/> </viv>
</form>
</body>
</html>
بهذه الطريقة ، تتشكل صفحتنا:
مع البرنامج الأساسي ، نحتاج الآن إلى دعم قاعدة البيانات ، لذلك نحتاج إلى تثبيت بيئة MongoDB
mongodb
MongoDB هو NOSQL يعتمد على تخزين الملفات الموزعة. هو مكتوب في C ++. بنية البيانات التي يدعمها MongoDB فضفاضة ، على غرار JSON. نحن نعلم أن JSON يمكنه دعم أي نوع ، حتى نتمكن من إنشاء بنية معقدة للغاية.
نسخة الكود كما يلي:
{
معرف: 1 ،
الاسم: 'ye xiaochai' ،
frinds: [
{id: 2 ، الاسم: 'su huanzhen'} ،
{id: 3 ، الاسم: 'كتاب واحد'}
]
}
تثبيت mongodb
أولاً ، انتقل إلى http://www.mongodb.org/downloads لتنزيل ملف التثبيت ، ثم قم بنسخ الملف إلى D Disk وقم بإعادة تسميته mongodb ، ثم قم بإنشاء مجلد مدونة جديد في الداخل
ثم افتح أداة سطر الأوامر لتبديل الدليل إلى BIN وإدخال:
انسخ الرمز كما يلي: mongod -dbpath d:/mongodb/blog
اضبط مجلد المدونة على دليل المشروع وابدأ قاعدة البيانات. من أجل الراحة ، سنكتب أمرًا ونقرر مباشرة لبدء قاعدة البيانات:
انسخ الرمز كما يلي: d: /mongodb/bin/mongod.exe -dbpath d:/mongodb/blog
رابط إلى mongodb
بعد تثبيت قاعدة البيانات بنجاح ، يحتاج برنامجنا أيضًا إلى برنامج "برنامج التشغيل" ذي الصلة لربط قاعدة البيانات. بالطبع ، يجب تنزيل الحزمة ...
افتح package.json لإضافة خط جديد في التبعيات
نسخة الكود كما يلي:
{
"الاسم": "اسم التطبيق" ،
"الإصدار": "0.0.1" ،
"خاص": صحيح ،
"البرامج النصية": {
"ابدأ": "عقدة app.js"
} ،
"التبعيات": {
"Express": "3.4.8" ،
"EJS": "*" ،
"Mongodb": "*"
}
}
ثم قم بتشغيل تثبيت NPM لتنزيل حزمة التبعية الجديدة. وبهذه الطريقة ، تتوفر برامج التشغيل المتعلقة بـ MongoDB. لربط MySQL وقواعد البيانات الأخرى ، هناك حاجة إلى حزم التبعية الأخرى.
في هذا الوقت ، قم بإنشاء ملف SETTER.JS في دليل الجذر لحفظ معلومات اتصال قاعدة البيانات
نسخة الكود كما يلي:
module.exports = {
ملفات تعريف الارتباط: "myblog" ،
DB: "المدونة" ،
المضيف: "المضيف المحلي"
} ؛
DB هو اسم قاعدة البيانات ، والمضيف هو عنوان قاعدة البيانات ، ويستخدم ملف تعريف الارتباط لتشفير ملفات تعريف الارتباط وليس له أي علاقة بقاعدة البيانات
بعد ذلك ، قم بإنشاء مجلد نموذج جديد في دليل الجذر وإنشاء DB.JS جديد في مجلد النماذج
نسخة الكود كما يلي:
إعدادات VAR = مطلوب ('../ الإعدادات ") ،
DB = طلب ('mongodb'). db ،
اتصال = مطلوب ('mongodb'). الاتصال ،
Server = require ('mongodb'). الخادم ؛
module.exports = new db (Settings.db ، server new (Settings.host ، connection.default_port) ، {safe: true}) ؛
نسخة الكود كما يلي: New DB (Settings.DB ، خادم جديد (الإعدادات. HOST ، Connection.default_port) ، {Safe: True}) ؛
قم بتعيين اسم قاعدة البيانات وعنوان قاعدة البيانات ومنفذ قاعدة البيانات لإنشاء مثيل قاعدة بيانات وتصدير المثيل من خلال module.exports ، بحيث يمكن قراءة قاعدة البيانات وكتابتها بواسطة المتطلبات
نحتاج إلى الكتابة بنجاح إلى قاعدة البيانات ، ويحتاج البرنامج من جانب الخادم إلى معالجة معلومات النشر ، لذلك نقوم بإنشاء مستخدم جديد في مجلد النماذج
نسخة الكود كما يلي:
var mongodb = require ('./ db') ؛
مستخدم الوظيفة (المستخدم) {
this.name = user.name ؛
this.password = user.password ؛
} ؛
module.exports = user ؛
// تخزين معلومات المستخدم
user.prototype.save = function (callback) {
// مستند المستخدم يتم تخزينه في قاعدة البيانات
var user = {
الاسم: this.name ،
كلمة المرور: this.password
} ؛
// افتح قاعدة البيانات
mongodb.open (وظيفة (err ، db) {
إذا (خطأ) {
إرجاع رد الاتصال (ERR) ؛ // خطأ ، إرجاع معلومات ERR
}
// اقرأ مجموعة المستخدمين
db.collection ('المستخدمين' ، الدالة (err ، collection) {
إذا (خطأ) {
mongodb.close () ؛
إرجاع رد الاتصال (ERR) ؛ // خطأ ، إرجاع معلومات ERR
}
// أدخل بيانات المستخدم في مجموعة المستخدمين
collection.insert (المستخدم ، {
آمن: صحيح
} ، الدالة (err ، المستخدم) {
mongodb.close () ؛
إذا (خطأ) {
إرجاع رد الاتصال (ERR) ؛ // خطأ ، إرجاع معلومات ERR
}
رد الاتصال (NULL ، المستخدم [0]) ؛ //نجاح! ERR هو NULL وإرجاع مستند المستخدم المخزن
}) ؛
}) ؛
}) ؛
} ؛
نسخة الكود كما يلي:
// قراءة معلومات المستخدم
user.get = دالة (الاسم ، رد الاتصال) {
// افتح قاعدة البيانات
mongodb.open (وظيفة (err ، db) {
إذا (خطأ) {
إرجاع رد الاتصال (ERR) ؛ // خطأ ، إرجاع معلومات ERR
}
// اقرأ مجموعة المستخدمين
db.collection ('المستخدمين' ، الدالة (err ، collection) {
إذا (خطأ) {
mongodb.close () ؛
إرجاع رد الاتصال (ERR) ؛ // خطأ ، إرجاع معلومات ERR
}
// ابحث عن مستند باسم المستخدم (اسم مفتاح) اسم القيمة
collection.findone ({
الاسم: الاسم
} ، الدالة (err ، المستخدم) {
mongodb.close () ؛
إذا (خطأ) {
رد رد الاتصال (ERR) ؛ // فشل! العودة إلى معلومات ERR
}
رد الاتصال (NULL ، المستخدم) ؛ // النجاح! إرجاع معلومات مستخدم الاستعلام
}) ؛
}) ؛
}) ؛
} ؛
هنا يكتب المرء البيانات والآخر يقرأ البيانات. هناك معالج. تحتاج الآن إلى إضافة البرنامج التالي أمام index.js.
نسخة الكود كما يلي: var user = require ('../ models/user.js') ؛
تعديل App.post ('/register')
نسخة الكود كما يلي:
app.post ('/register' ، function (req ، res) {
var name = req.body.name ؛
var pwd = req.body.password ؛
var newuser = مستخدم جديد ({
الاسم: الاسم ،
كلمة المرور: PWD
}) ؛
newUser.save (وظيفة (خطأ ، مستخدم) {
// العمليات ذات الصلة ، جلسة الكتابة
Res.Send (المستخدم) ؛
}) ؛
}) ؛
ثم انقر للتسجيل وسيكون لديك رد فعل
إذا لم تتمكن من تحديد ما إذا كنت ستكتب إلى قاعدة البيانات في هذا الوقت ، فيمكنك إدخال قاعدة البيانات للاستعلام والتبديل أولاً إلى دليل قاعدة البيانات
انسخ الرمز كما يلي: D:/mongodb/bin>
يدخل:
انسخ الرمز على النحو التالي: Mongo
ثم قم بتبديل قاعدة البيانات الخاصة بها للاتصال بالمدونة
انسخ الرمز على النحو التالي: استخدم المدونة
الإدخال الأخير
انسخ الرمز كما يلي: db.users.find ()
لقد رأينا جميعًا بسعادة البيانات التي يتم كتابتها ، لذا فقد انتهى تعلم اليوم في الوقت الحالي
خاتمة
تابعنا اليوم مدونة لإكمال العملية من التثبيت إلى الكتابة إلى قاعدة البيانات. دعنا نضيف جوانب أخرى غدًا وتعمق تدريجياً في تعلم Nodejs.