SlideShare a Scribd company logo
‫با‬ ‫آضٌایی‬Node.js
ِ‫ترجو‬ ً‫ا‬‫تقریب‬ ‫کتاب‬ ‫ایي‬‫است‬ ‫ای‬‫از‬5‫کتاب‬ ‫از‬ ‫اٍل‬ ‫فصل‬Node.js in Action
‫سریاًی‬ ‫هحوذ‬ :ِ‫ترجو‬
:‫قیوت‬5555‫تَهاى‬
:‫صفحات‬ ‫تعذاد‬731
‫فایل‬ ‫ایي‬‫صفحات‬ ‫از‬ ‫برخی‬ ‫حاٍی‬ِ‫ًسخ‬ ‫خریذ‬ ‫برای‬ ‫توایل‬ ‫صَرت‬ ‫در‬ .‫است‬ ‫کتاب‬‫کاهل‬ ‫الکترًٍیکی‬ ‫ی‬
‫هی‬‫با‬ ‫تَاًیذ‬soryani@chmail.irِ‫ب‬ ‫یا‬ ،‫بگیریذ‬ ‫تواس‬‫لیٌک‬ ‫ایي‬.‫فرهاییذ‬ ِ‫هراجع‬
ِ‫هقذه‬
‫بخص‬7ً‫هبا‬‫ی‬‫ًَد‬
‫فصل‬7ِ‫ب‬Node.js‫خَش‬‫آهذ‬‫ی‬‫ذ‬
1.1‫ثٙب‬ٜ‫قس‬‫ثط‬‫خبٚااؾىط‬‫ی‬‫پت‬
1.2ٖٚ‫آؾٙىط‬ٚ‫ضذسازٔحٛض‬:‫ٔطٚضٌط‬
1.3ٖٚ‫آؾٙىط‬ٚ‫ضذسازٔحٛض‬:‫ؾطٚض‬
1.4ٝٔ‫ثط٘ب‬‫ٞب‬‫ی‬DIRTY
1.5ٝ‫ث‬‫نٛضت‬‫پ‬‫ی‬‫ف‬‫فطو‬DIRTY
1.5.1‫ی‬‫ه‬َ‫ٔثب‬ٜ‫ؾبز‬‫ی‬ٖٚ‫آؾٙىط‬
1.5.2"ِ‫ض‬ٚ‫ؾط‬HTTPِ"،ٜ‫ؾبز‬‫ثب‬‫ذطٚخ‬‫ی‬Hello World
1.5.3ٝ‫ث‬‫خط‬‫ی‬ٖ‫ب‬‫زض‬ٖ‫آٚضز‬ٜ‫زاز‬
1.6ٝ‫ذالن‬
‫فصل‬2‫ساختي‬‫ی‬‫ک‬ِ‫برًاه‬‫ی‬‫چت‬‫چٌذ‬ِ‫اتاق‬
2.1‫ٔطٚض‬‫ی‬‫ثط‬ٝٔ‫ثط٘ب‬
2.2٘‫ی‬‫بظٔٙس‬‫ی‬‫ٞب‬‫ی‬ٝٔ‫ثط٘ب‬ٜٚ‫آٔبز‬‫ؾبظ‬‫ی‬ِٚ‫ا‬‫ی‬ٝ
2.2.1ٝ‫اضائ‬‫ی‬HTTPٚWebSocket
2.2.2ٗ‫ؾبذت‬‫ؾبذتبض‬‫فب‬‫ی‬ُٝٔ‫ثط٘ب‬
2.2.3‫ٔؼ‬‫ی‬ٖٗ‫وطز‬ٍ‫ٚاثؿت‬‫ی‬‫ٞب‬
2.2.4‫٘هت‬ٖ‫وطز‬ٍ‫ٚاثؿت‬‫ی‬‫ٞب‬
2.3ٝ‫اضائ‬ٖ‫وطز‬HTML،CSS،ٚJAVASCRIPTٌِٛ‫ٔطث‬ٝ‫ث‬‫ؾٕت‬‫وبضثط‬ٝٔ‫ثط٘ب‬
2.3.1ٗ‫ؾبذت‬‫ی‬‫ه‬"‫ؾطٚض‬‫فب‬‫ی‬ُِ-‫ا‬‫ی‬‫ؿتب‬‫ی‬"‫پب‬‫ی‬ٝ
2.3.2ٝ‫ايبف‬ٖ‫وطز‬‫فب‬‫ی‬ُ‫ٞب‬‫ی‬HTMLٚCSS
2.4‫ضؾ‬‫ی‬ٌ‫س‬‫ی‬ٝ‫ث‬َ‫تجبز‬‫پ‬‫ی‬ْ‫ب‬ٌٛ‫ٔطث‬ٝ‫ث‬‫چت‬‫ثب‬ٜ‫اؾتفبز‬‫اظ‬SOCKET.IO
2.4.1ٜ‫آٔبز‬ٖ‫وطز‬‫ؾطٚض‬Socket.IO
2.4.2‫ضؾ‬‫ی‬ٌ‫س‬‫ی‬ٝ‫ث‬‫ؾٙبض‬‫ی‬ٛ‫ٞب‬ٚ‫ضذسازٞب‬‫ی‬‫ٔرتّف‬ٝٔ‫ثط٘ب‬
2.5ٜ‫اؾتفبز‬‫اظ‬‫خبٚااؾىط‬‫ی‬‫پت‬‫ؾٕت‬‫وبضثط‬‫ثطا‬‫ی‬ٍ‫ٚاؾ‬‫وبضثط‬‫ی‬ٝٔ‫ثط٘ب‬
2.5.1َ‫اضؾب‬‫پ‬‫ی‬ْ‫ب‬‫ٞب‬ٚ‫تغ‬‫یی‬‫ط‬‫اتبق‬/ْ‫٘ب‬ٝ‫ث‬‫ؾطٚض‬
2.5.2‫ٕ٘ب‬‫ی‬‫ف‬‫پ‬‫ی‬ْ‫ب‬‫ٞب‬ٚ‫اتبق‬‫ٞب‬‫ی‬‫ٔٛخٛز‬‫زض‬ٍ‫ٚاؾ‬‫وبضثط‬‫ی‬
2.6ٝ‫ذالن‬
‫فصل‬3ً‫هبا‬‫ی‬ِ‫برًاه‬ًَ‫ی‬‫س‬‫ی‬‫با‬‫ًَد‬
3.1ٖ‫ؾبظٔب‬ٞ‫ز‬‫ی‬ٜٚ‫اؾتفبز‬‫ی‬‫ٔدسز‬‫اظ‬‫ػّٕىطز‬‫زض‬‫٘ٛز‬
3.1.1ٗ‫ؾبذت‬َٚ‫ٔبغ‬‫ٞب‬
3.1.2ٟ‫ث‬‫ی‬ٝٙ‫ؾبظ‬‫ی‬‫ؾبذت‬َٚ‫ٔبغ‬‫ثب‬ٜ‫اؾتفبز‬‫اظ‬module.exports
3.1.3ٜ‫اؾتفبز‬‫ی‬‫ٔدسز‬‫اظ‬َٚ‫ٔبغ‬‫ٞب‬‫ثب‬ٜ‫اؾتفبز‬‫اظ‬ٝ‫پٛق‬‫ی‬node_modules
3.1.4‫تصوطات‬
3.2ٙ‫تى‬‫ی‬‫ه‬‫ٞب‬‫ی‬ٝٔ‫ثط٘ب‬ٛ٘‫ی‬‫ؿ‬‫ی‬ٖٚ‫آؾٙىط‬
3.2.1‫ضؾ‬‫ی‬ٌ‫س‬‫ی‬ٝ‫ث‬‫ضذساز‬‫ٞب‬‫ی‬‫ته‬ٝ‫ٔطتج‬‫ا‬‫ی‬‫ثب‬َ‫وب‬‫ثه‬‫ٞب‬
3.2.2‫ضؾ‬‫ی‬ٌ‫س‬‫ی‬ٝ‫ث‬‫ضذسازٞب‬‫ی‬‫تىطاض‬ٜ‫قٛ٘س‬‫ثب‬ٜ‫نبزضوٙٙس‬‫ٞب‬‫ی‬‫ضذساز‬
3.2.3‫چبِف‬‫ٞب‬‫ی‬‫ٔٛخٛز‬‫زض‬ٝ‫تٛؾؼ‬‫ی‬ٖٚ‫آؾٙىط‬
3.3‫تطت‬‫ی‬‫ت‬‫ثرك‬‫ی‬ٖ‫س‬ٝ‫ث‬‫ُٔٙك‬ٖٚ‫آؾٙىط‬
3.3.1ٝ‫چ‬ٖ‫ظٔب‬‫اظ‬َ‫وٙتط‬‫خط‬‫ی‬ٖ‫ب‬ُ‫ذ‬‫ی‬ٜ‫اؾتفبز‬ٙ‫و‬‫ی‬ٓ
3.3.2‫پ‬‫ی‬ٜ‫بز‬‫ؾبظ‬‫ی‬َ‫وٙتط‬‫خط‬‫ی‬ٖ‫ب‬ُ‫ذ‬‫ی‬
3.3.3‫پ‬‫ی‬ٜ‫بز‬‫ؾبظ‬‫ی‬َ‫وٙتط‬‫خط‬‫ی‬ٖ‫ب‬‫ٔٛاظ‬‫ی‬
3.3.4ٜ‫ثٟط‬ٗ‫ٌطفت‬‫اظ‬‫اثعاضٞب‬‫ی‬ٝ‫خبٔؼ‬‫ؾبذت‬
3.4ٝ‫ذالن‬
‫بخص‬2ِ‫تَسع‬‫ی‬ِ‫برًاه‬‫ّا‬‫ی‬‫ٍب‬‫با‬‫ًَد‬
‫فصل‬4‫ساختي‬ِ‫برًاه‬‫ّا‬‫ی‬‫ٍب‬‫ًَد‬
4.1٘‫ٔجب‬‫ی‬ِ‫ض‬ٚ‫ؾط‬HTTP
4.1.1ٜٛ‫٘ح‬‫ی‬ٝ‫اضائ‬‫ی‬‫زضذٛاؾت‬‫ٞب‬‫ی‬HTTPِ‫ٚضٚز‬‫ی‬،ٝ‫ث‬ٝ‫تٛؾؼ‬،ٖ‫زٞٙسٌب‬ٍ‫تٛؾ‬‫٘ٛز‬
4.1.2‫ی‬‫ه‬ِ‫ض‬ٚ‫ؾط‬HTTPِ‫پب‬‫ی‬ٝٝ‫و‬‫ثب‬"Hello World"‫پبؾد‬ٔ‫ی‬‫زٞس‬
4.1.3ٖ‫ذٛا٘س‬ُ‫ؾطفه‬‫ٞب‬‫ی‬‫زضذٛاؾت‬ٚ‫تؼ‬‫یی‬ُٗ‫ؾطفه‬‫ٞب‬‫ی‬‫پبؾد‬
4.1.4‫تؼ‬‫یی‬ٗ‫وس‬‫ٚيؼ‬‫ی‬‫ت‬‫ی‬‫ه‬‫پبؾد‬HTTP
4.2ٗ‫ؾبذت‬‫ی‬‫ه‬ٚ‫ؾط‬‫ی‬ِ‫ؽ‬ِ‫ة‬ٚRESTFUL
4.2.1ٗ‫ؾبذت‬‫ٔٙبثغ‬‫ثب‬‫زضذٛاؾت‬‫ٞب‬‫ی‬POST
4.2.2‫ٚاوك‬‫ی‬‫ٔٙبثغ‬‫ثب‬‫زضذٛاؾت‬‫ٞب‬‫ی‬GET
4.2.3‫حصف‬ٖ‫وطز‬‫ٔٙبثغ‬‫ثب‬‫زضذٛاؾت‬‫ٞب‬‫ی‬DELETE
4.3ٝ‫اضائ‬‫ی‬‫فب‬‫ی‬ُ‫ٞب‬‫ی‬‫ا‬‫ی‬‫ؿتب‬
4.3.1ٗ‫ؾبذت‬‫ی‬‫ه‬ِ‫ض‬ٚ‫ؾط‬‫فب‬‫ی‬ُِ-‫ا‬‫ی‬‫ؿتب‬
4.3.2‫ضؾ‬‫ی‬ٌ‫س‬‫ی‬ٝ‫ث‬‫ذُبٞب‬‫ی‬‫ؾطٚض‬
4.3.3‫ضؾ‬‫ی‬ٌ‫س‬‫ی‬ٝ‫ث‬‫ذُب‬ٝ‫ث‬‫نٛضت‬‫پ‬‫ی‬ٍ‫ك‬‫ی‬ٝ٘‫طا‬‫ثب‬fs.stat
4.4‫زض‬‫ی‬‫بفت‬‫ٚضٚز‬‫ی‬ٖ‫وبضثطا‬‫اظ‬ْ‫فط‬‫ٞب‬
4.4.1‫ضؾ‬‫ی‬ٌ‫س‬‫ی‬ٝ‫ث‬‫ف‬‫ی‬‫ّسٞب‬‫ی‬ْ‫فط‬َ‫اضؾب‬ٜ‫قس‬
4.4.2‫ضؾ‬‫ی‬ٌ‫س‬‫ی‬ٝ‫ث‬‫فب‬‫ی‬ُ‫ٞب‬‫ی‬‫آپّٛز‬ٜ‫قس‬‫ثب‬ٜ‫اؾتفبز‬‫اظ‬formidable
4.4.3ٝ‫ٔحبؾج‬‫ی‬ٔ‫ی‬ٖ‫عا‬‫پ‬‫ی‬‫كطفت‬‫آپّٛز‬
4.5ٗٔ‫ا‬ٖ‫وطز‬ٝٔ‫ثط٘ب‬‫ی‬‫قٕب‬
4.6ٝ‫ذالن‬
‫فصل‬5‫رخ‬‫ی‬ُ‫ر‬‫کردى‬ُ‫داد‬‫ّا‬‫ی‬ِ‫برًاه‬‫ی‬‫ًَد‬
5.1‫شذ‬‫ی‬ٜ‫ط‬‫ی‬ٜ‫زاز‬ٖٚ‫ثس‬ٜ‫اؾتفبز‬‫اظ‬‫ی‬‫ه‬‫ؾ‬‫ی‬ٓ‫ؿت‬‫ٔس‬‫ی‬‫ط‬‫ی‬‫ت‬ٜ‫وٙٙس‬
5.1.1‫شذ‬‫ی‬ٜ‫ط‬‫ؾبظ‬‫ی‬‫زض‬ٝ‫حبفظ‬
5.1.2‫شذ‬‫ی‬ٜ‫ط‬‫ؾبظ‬‫ی‬ٙ‫ٔجت‬‫ی‬‫ثط‬‫فب‬‫ی‬ُ
5.2‫ؾ‬‫ی‬ٓ‫ؿت‬‫ٞب‬‫ی‬‫ٔس‬‫ی‬‫ط‬‫ی‬‫ت‬‫پب‬‫ی‬ٜ‫ٍب‬ٜ‫زاز‬‫ی‬ُٝ‫ضاث‬‫ا‬‫ی‬
5.2.1MySQL
5.2.2PostgreSQL
5.3‫پب‬‫ی‬ٜ‫ٍب‬ٜ‫زاز‬‫ٞب‬‫ی‬NOSQL
5.3.1Redis
5.3.2MongoDB
5.3.3Mongoose
5.4ٝ‫ذالن‬
ِ‫هقذه‬
node.jsٝٔ‫ثط٘ب‬ ‫ثطای‬ ‫اؾت‬ ‫پّتفطٔی‬ٖ‫ظثب‬ ‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬ ،‫٘ٛیؿی‬JavaScript‫أىب٘بت‬ ‫اظ‬ ‫فطاتط‬ ‫أىب٘بتی‬ ٝ‫و‬ ،JavaScript‫ٔی‬ ٓٞ‫فطا‬ ‫ضا‬ ٝ‫پبی‬‫ٔی‬ ٚ ،‫وٙس‬ٖ‫تٛا‬
ٝٔ‫ثط٘ب‬ ٖ‫آ‬ ‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬ٝٔ‫ثط٘ب‬ ‫اظ‬ ‫فطاتط‬ ‫ٞبیی‬‫ٔی‬ ‫اخطا‬ ‫ٔطٚضٌطٞب‬ ‫ضٚی‬ ٝ‫و‬ ‫٘ٛقت‬ ‫ٞبیی‬‫فٙبٚضی‬ ‫ثب‬ ٝ‫ٔكبث‬ ٝ‫اِجت‬ ٚ ،‫قٛ٘س‬ْ‫٘ط‬ ‫ٞبی‬ٚ ‫لٛت‬ ٌ‫٘مب‬ ‫زاضای‬ ‫زیٍط‬ ‫افعاضی‬
.‫اؾت‬ ‫يؼفی‬
ٖ‫ػٙٛا‬ ‫ثب‬ ‫وتبة‬ ٗ‫ای‬"‫آقٙبیی‬‫ثب‬Node.js"ٕٝ‫تطخ‬ ً‫ب‬‫تمطیج‬‫اظ‬ ‫اؾت‬ ‫ای‬5‫وتبة‬ َٚ‫ا‬ ُ‫فه‬Node.js in Actionٖ‫فطاٚا‬ ‫تالـ‬ ٚ ‫ظیبز‬ ٖ‫ظٔب‬ ‫نطف‬ ‫اظ‬ ‫پؽ‬ ٝ‫و‬
ٜ‫آٔبز‬.‫قس‬ ‫ا٘تكبض‬ ‫ی‬
ٗ‫ای‬ ‫زض‬5ٝ‫اضائ‬ ٚ ‫ٚة‬ ِ‫ض‬ٚ‫ؾط‬ ‫یه‬ ٗ‫ؾبذت‬ ،‫٘ٛز‬ ‫ٔؼطفی‬ ُ‫لجی‬ ‫اظ‬ ‫ُٔبِجی‬ ُ‫فه‬ُ‫فبی‬ٜٛ‫٘ح‬ ،‫ایؿتب‬ ‫ٞبی‬‫ؾطٚیؽ‬ ‫یه‬ ٗ‫ؾبذت‬ ‫ی‬ِ‫ة‬ٚ ِRESTful‫ثط‬ ‫ثب‬ ‫آقٙبیی‬ ،‫ذی‬
َٚ‫ٔبغ‬ٝ‫ؾبذت‬ ‫ٞبی‬ٜ‫پبیٍب‬ ‫ثطذی‬ ‫اظ‬ ‫اَالػبتی‬ ،‫٘ٛز‬ ‫ثطای‬ ٜ‫قس‬ٜٛ‫٘ح‬ ٚ ٜ‫زاز‬ ‫ٞبی‬ٖ‫آ‬ ‫اظ‬ ٜ‫اؾتفبز‬ ‫ی‬َ‫ٔثب‬ ‫شوط‬ ‫ثب‬ ٜ‫ٕٞطا‬ ... ٚ ،‫٘ٛز‬ ‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬ ‫ٞب‬ٜ‫آٔس‬ ‫ٞبیی‬.‫ا٘س‬
‫زیٍطی‬ ‫وتبة‬ ٓ‫زاقت‬ ‫ایٙتط٘ت‬ ‫فًبی‬ ‫زض‬ ٝ‫و‬ ‫خؿتدٛیی‬ ‫زض‬ ٜ‫ٍ٘بض٘س‬ٝ‫نفح‬ ‫تؼساز‬ ٗ‫ای‬ ‫ثب‬‫آٔٛظـ‬ ‫ٔٛضز‬ ‫زض‬node.js‫ظث‬ ٝ‫ث‬ٓ‫٘یبفت‬ ‫فبضؾی‬ ٖ‫ب‬ٚ
ً‫ال‬‫احتٕب‬‫وتبة‬ ٗ‫ای‬‫زض‬ٚ ٗ‫اِٚی‬ ‫ا٘تكبض‬ ٖ‫ظٔب‬‫تٟٙب‬‫وتبة‬‫ثطای‬ ‫آٔٛظقی‬node.js‫فبضؾی‬ ٖ‫ظثب‬ ٝ‫ث‬‫اظ‬ ‫ثیف‬ ‫نفحبت‬ ‫تؼساز‬ ‫ثب‬100ٝ‫نفح‬.‫اؾت‬
ٝ‫و‬ ‫ثبقیس‬ ٝ‫زاقت‬ ٝ‫تٛخ‬ ٝ‫٘ىت‬ ٗ‫ای‬ ٝ‫ث‬ٝ‫٘ؿر‬ ‫ا٘تكبض‬ ٖ‫ظٔب‬ ‫اظ‬( ٖٛٙ‫او‬ ‫تب‬ ‫وتبة‬ ‫انّی‬ ٖ‫ظثب‬ ‫ی‬‫اضزیجٟكت‬94ٝ‫ٌصقت‬ ٓ‫٘ی‬ ٚ َ‫ؾب‬ ‫یه‬ ً‫ا‬‫حسٚز‬ )ٚ ‫اؾت‬
ٜ‫وطز‬ ‫تغییط‬ ٖ‫ظٔب‬ ٖ‫آ‬ ‫اظ‬ ُ‫ٔؿبئ‬ ‫ثطذی‬ ً‫ب‬‫َجؼ‬ٝ‫٘ؿر‬ ً‫ال‬‫(ٔث‬ ‫ا٘س‬ْ‫٘ط‬ ‫ی‬ٝ‫٘ؿر‬ ٚ ٜ‫اؾتفبز‬ ‫ٔٛضز‬ ‫افعاضٞبی‬.)‫٘ٛز‬ ‫ذٛز‬ ‫ی‬
‫ٔی‬ ‫انّی‬ ٖ‫ظثب‬ ‫وتبة‬ ‫اظ‬ )‫اٍّ٘یؿی‬ ٖ‫ظثب‬ ٝ‫(ث‬ ‫ثیكتط‬ ‫ٔكرهبت‬ ٖ‫زیس‬ ‫ثطای‬ٝ‫ٔطاخؼ‬ ‫ظیط‬ ‫آزضؼ‬ ‫ٚ/یب‬ ٖٚ‫آٔبظ‬ ‫ؾبیت‬ ‫زض‬ ‫وتبة‬ ‫آزضؼ‬ ٝ‫ث‬ ‫تٛا٘یس‬
:‫ثفطٔبییس‬
http://www.manning.com/cantelon/
ٖ‫ضایٍب‬ ‫نٛضت‬ ٝ‫ث‬ ‫ظیط‬ ‫آزضؼ‬ ‫َطیك‬ ‫اظ‬ ‫حبيط‬ َ‫حب‬ ‫زض‬ ٓٞ ‫انّی‬ ٖ‫ظثب‬ ‫وتبة‬‫زؾتطؾ‬ ُ‫لبث‬‫ی‬:‫اؾت‬
http://www.ebooksworld.ir/post/index/99
ٖ‫ظثب‬ ‫ثب‬ ‫ذٛة‬ ‫آقٙبیی‬JavaScript‫پیف‬ ‫یه‬ٝ‫ُٔبِؼ‬ ‫ثطای‬ ‫اؾبؾی‬ ‫٘یبظ‬‫ثب‬ ‫آقٙبیی‬ ‫ٔمساضی‬ ٗ‫زاقت‬ .‫اؾت‬ ‫وتبة‬ ٗ‫ای‬ ‫ی‬HTML،CSSٚjQuery،
ٚ‫وبٔپیٛتطی‬ ‫اَالػبت‬ ‫ثطذی‬ ٗ‫زاقت‬(‫ثب‬ ‫خعئی‬ ‫ذیّی‬ ٝ٘ ٚ ‫وّی‬ ‫آقٙبیی‬ ُ‫ٔث‬HTTP)‫٘یع‬ٜ‫ثٟط‬ ‫ثبػث‬‫ثٛز‬ ‫ذٛاٞٙس‬ ‫وتبة‬ ‫اظ‬ ‫ثیكتط‬ ‫ثطزاضی‬.
ْ‫أیسٚاض‬‫اثط‬ ٗ‫ای‬‫زاضز‬ ٝ‫و‬ ‫اقىبالتی‬ ْ‫تٕب‬ ‫ثب‬.‫قٛز‬ ‫ٚالغ‬ ‫ٔفیس‬ ٖ‫ثطایتب‬ ‫ثتٛا٘س‬
‫ٔی‬ ُ‫تٕبی‬ ‫نٛضت‬ ‫زض‬‫اِىتطٚ٘یىی‬ ‫پؿت‬ ٝ‫ث‬ ‫ضا‬ ‫ذٛز‬ ‫٘ظطات‬ ‫تٛا٘یس‬soryani@chmail.ir.‫فطٔبییس‬ َ‫اضؾب‬
‫اضزیجٟكت‬94
1
‫بخص‬7
‫ًَد‬ ‫هباًی‬7
‫یبزٌی‬ ٖ‫ظٔب‬ ‫زض‬‫یب‬ ‫٘ٛیؿی‬ ٝٔ‫ثط٘ب‬ ٖ‫ظثب‬ ‫یه‬ ‫طی‬‫یه‬ٓ‫فطی‬‫ٚضن‬2
‫ٔی‬ ٚ‫ضٚثط‬ ‫خسیسی‬ ٓ‫ٔفبٞی‬ ‫ثب‬ ‫اغّت‬ ،‫اظ‬ ‫خسیسی‬ ‫٘ٛع‬ ٝ‫ث‬ ْ‫ّٔع‬ ‫ضا‬ ‫قٕب‬ ٝ‫و‬ ‫قٛیس‬ٝ‫ث‬ ٖ‫وطز‬ ‫فىط‬
.‫وٙس‬ ‫ٔی‬ ُ‫ٔؿبئ‬‫٘ٛز‬‫ٔؿتثٙب‬ ٜ‫لبئس‬ ٗ‫ای‬ ‫اظ‬ٖ‫چٙب‬ ،‫٘یؿت‬‫خسیسی‬ ‫ضٞیبفت‬ ٝ‫و‬ٝ‫تٛؾؼ‬ ٜٛ‫ٚخ‬ ‫اظ‬ ‫ثطذی‬ ‫ثطای‬‫ی‬ْ‫٘ط‬.‫زاضز‬ ‫وبضثطزی‬ ‫افعاضٞبی‬
ٝ‫ایٙى‬ ‫ٔٛضز‬ ‫زض‬ ‫وتبة‬ ٗ‫ای‬ ‫اظ‬ ‫ثرف‬ ٗ‫اِٚی‬‫٘ٛز‬ً‫ب‬‫زلیم‬‫ثب‬ ‫تفبٚتی‬ ٝ‫چ‬‫پّت‬ْ‫فط‬3
‫ٞبی‬ٖ‫آ‬ ‫اؾبؼ‬ ‫(ثط‬‫ٚیىی‬ ‫زض‬ ٝ‫چ‬‫اؾت‬ ٜ‫آٔس‬ ‫پیسیب‬،،‫وبٔپیٛتطی‬ ْ‫پّتفط‬ ‫یه‬‫وّی‬ ‫زض‬ٗ‫تطی‬
،‫حبِت‬ٍ‫ٔحی‬ ‫یه‬ٜ‫آٔبز‬ٝ‫و‬ ‫اؾت‬ْ‫٘ط‬ ‫اظ‬ ٝ‫تى‬ ‫یه‬ٖ‫آ‬ ‫أىب٘بت‬ ‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬ ٚ ٍ‫ٔحی‬ ٖ‫آ‬ ‫لٛاػس‬ ‫اظ‬ ‫پیطٚی‬ ‫ثب‬ ‫افعاض‬،‫ٔی‬ ‫اخطا‬ ٖ‫آ‬ ‫زض‬‫قٛز‬.)‫تٛيیح‬ ‫زاضز‬ ‫زیٍط‬
‫ٔی‬ٚ ‫زٞس‬‫ٔی‬ ٓ‫تؼّی‬ ‫آ٘طا‬ ‫اظ‬ ٜ‫اؾتفبز‬ َٛ‫ان‬ ٗ‫ٕٞچٙی‬ٝٔ‫ثط٘ب‬ ٝ‫و‬ ‫آٔٛذت‬ ‫ذٛاٞیس‬ ‫قٕب‬ .‫زٞس‬‫تِٛیس‬ ‫وبضثطزی‬ ‫ٞبی‬‫زض‬ ٜ‫قس‬‫٘ٛز‬،‫زاض٘س‬ ‫قىّی‬ ٝ‫چ‬ٍٝ٘ٛ‫چ‬
ٖ‫ؾبظٔب‬‫زٞی‬‫ٔی‬‫قٛ٘س‬،‫چبِف‬ ‫ثب‬ ‫ثبیس‬ ٍٝ٘ٛ‫چ‬ ٚٝ‫ث‬ ‫ٔرتم‬ ‫ٞبی‬‫٘ٛز‬‫ثرف‬ ‫زض‬ ٝ‫آ٘چ‬ .‫قس‬ ٝ‫ٔٛاخ‬1ٕ‫ق‬ ٝ‫ث‬ ‫ٌطفت‬ ‫ذٛاٞیس‬ ‫یبز‬‫یبزٌیطی‬ ‫ثطای‬ ‫٘یبظ‬ ‫ٔٛضز‬ ‫ٔجب٘ی‬ ‫ب‬
ٜٛ‫٘ح‬‫ی‬ٝٔ‫ثط٘ب‬ ‫تِٛیس‬‫تحت‬ ‫وبضثطزی‬ ‫ٞبی‬‫زض‬ ‫ٚة‬node‫ثرف‬ ‫زض‬ ٝ‫(و‬2‫پطزاذت‬ ٓ‫ذٛاٞی‬ ‫ثیكتط‬ ٖ‫آ‬ ٝ‫ث‬،).‫زاز‬ ‫ذٛاٞس‬ ‫ضا‬
1
node
2
framework
3
platform
2
3
‫فصل‬7
ِ‫ب‬Node.js‫آهذیذ‬ ‫خَش‬
‫هی‬ ‫پَضص‬ ‫فصل‬ ‫ایي‬ ِ‫ک‬ ‫هطالبی‬‫دّذ‬
Node.js‫چیؿت‬
‫خبٚااؾىطیپت‬‫ؾطٚض‬ ‫ضٚی‬
ٖٚ‫آؾٙىط‬ ‫َجیؼت‬1
‫ضذسازٔحٛض‬ ٚ2
‫٘ٛز‬
ٌٝ٘ٛٝٔ‫ثط٘ب‬ ‫اظ‬ ‫ٞبیی‬ٖ‫آ‬ ‫ثطای‬ ‫٘ٛز‬ ٝ‫و‬ ‫ٞب‬‫اؾت‬ ٜ‫قس‬ ‫َطاحی‬ ‫ٞب‬
ٝٔ‫ثط٘ب‬ٕٝ٘ٛ٘ ‫ٞبی‬
ٗ‫ای‬ ‫حبال‬‫٘ٛز‬ٓٞ ‫قبیس‬ .‫ثبقیس‬ ٜ‫قٙیس‬ ‫ضا‬ ‫اؾٕف‬ ٝ‫و‬ ‫زاضز‬ َ‫احتٕب‬ ‫چیؿت؟‬ٖٛٙ‫او‬‫ٔی‬ ٜ‫اؾتفبز‬ ٖ‫آ‬ ‫اظ‬‫اظ‬ ٝ‫ِحظ‬ ٗ‫ای‬ ‫زض‬ .‫ٞؿتیس‬ ٚ‫وٙدىب‬ ٖ‫آ‬ ‫ٔٛضز‬ ‫زض‬ ‫قبیس‬ ‫یب‬ .‫وٙیس‬
ٖ‫ظٔب‬)‫انّی‬ ٖ‫ظثب‬ ‫وتبة‬ ‫ٍ٘بضـ‬ ٖ‫(ظٔب‬،‫٘ٛز‬َ‫ؾب‬ ‫زض‬ ‫(ظٟٛضـ‬ ‫اؾت‬ ٖ‫خٛا‬ ٚ ‫ٔحجٛة‬ ‫ثؿیبض‬2009ٜ‫ثٛز‬ ‫ٔیالزی‬‫اؾت‬.)ٜ‫ضز‬ ‫زاضای‬ْٚ‫ز‬ ‫ی‬ٗ‫ثیكتطی‬ ‫زض‬
ٜ‫ٔكبٞس‬ٜ‫قس‬‫ٞب‬‫زض‬ٜ‫پطٚغ‬‫ٞب‬‫ی‬github( ‫اؾت‬https://github.com/joyent/node)ٖ‫آ‬ ٝ‫ث‬ ٌٛ‫ٔطث‬ ٌٌُٛ ٜٚ‫ٌط‬ ‫زض‬ ،
(http://groups.google.com/group/nodejs)َ‫وب٘ب‬ ‫زض‬ ‫٘یع‬ ٚIRCَٛ‫ٔطث‬ٝ‫ا‬‫ـ‬
(http://webchat.freenode.net/?channels=node.js)ٝ‫ث‬ُ‫لبث‬ ‫ٔمساض‬‫ٔی‬ َ‫ز٘جب‬ ‫تٛخٟی‬‫اظ‬ ‫ثیف‬ ٚ ،‫قٛز‬15000َِٚ‫ٔبغ‬‫تِٛیس‬ٍ‫تٛؾ‬ ٜ‫قس‬
ٝ‫خبٔؼ‬‫ی‬ٝ‫تٛؾؼ‬‫زٞٙسٌب٘ف‬‫زض‬npm( ‫زاضز‬npm‫ٔسیطیت‬ٜ‫وٙٙس‬‫ی‬‫زض‬ ٝ‫ثؿت‬‫اؾت‬ ‫٘ٛز‬–http://npmjs.org.)‫اٚنبف‬ ٗ‫ای‬ ‫ثب‬ٝ٘‫پكتٛا‬ُ‫لبث‬ ‫ی‬‫تٛخٟی‬
ٗ‫ای‬ ‫ٔٛفمیت‬ ‫ثطای‬ْ‫پّتفط‬‫پؽ‬ ‫زض‬.‫زاضز‬ ‫لطاض‬ ٖ‫آ‬
‫ضؾٕی‬ ‫ؾبیت‬‫٘ٛز‬(http://www.nodejs.org)ٝ‫ث‬ ‫ضا‬ ٖ‫آ‬ٗ‫ای‬‫ٔی‬ ‫تؼطیف‬ ‫نٛضت‬:‫وٙس‬"‫ثٙب‬ ‫پّتفطٔی‬‫ثط‬ ٜ‫قس‬ِ‫ت‬‫خبٚااؾىطیپ‬ ‫ٔٛتٛض‬3
ْٚ‫وط‬(Chrome’s
JavaScript runtime)‫ث‬ٝٔ‫ثط٘ب‬ ٖ‫آؾب‬ ‫ؾبذت‬ ‫طای‬‫ٞبی‬‫تحت‬ٝ‫قجى‬4
‫ی‬‫ٔمیبؼ‬ ٚ ‫ؾطیغ‬.‫پصیط‬node.jsَ‫ٔس‬ ‫یه‬ ‫اظ‬I/O‫ضذسازٔحٛض‬ٜٚ‫غیطٔؿسٚزوٙٙس‬5
ٖ‫آ‬ ٝ‫و‬ ‫وٙس‬ ‫ٔی‬ ٜ‫اؾتفبز‬‫ؾجه‬ ‫ضا‬‫وبثطزی‬ ‫ٞبی‬ ٝٔ‫ثط٘ب‬ ‫ثطای‬ ‫ػبِی‬ ٚ ،‫وبضا‬ ٚ ٖ‫ٚظ‬ًِ٘‫ثالزض‬6
ٜ‫زاز‬‫ٔتٕطوع‬7
‫ضٚی‬ ٝ‫و‬ّٝ‫ٚؾی‬‫ٞبی‬‫تٛظیغ‬‫ٔی‬ ‫اخطا‬ ٜ‫قس‬‫ٔی‬ ‫قٛ٘س‬.‫وٙس‬"
:‫زاقت‬ ٓ‫ذٛاٞی‬ ‫ٍ٘بٞی‬ ‫ظیط‬ ٓ‫ٔفبٞی‬ ٝ‫ث‬ ،ُ‫فه‬ ٗ‫ای‬ ‫زض‬
‫إٞیت‬ ‫ػّت‬‫خبٚااؾىطیپت‬‫زض‬ٝ‫تٛؾؼ‬‫ؾطٚض‬ ‫ؾٕت‬ ‫ی‬
‫.چٍٍٛ٘ی‬ٝ‫ث‬ ‫ضؾیسٌی‬I/O‫ٔطٚضٌط‬ ٍ‫تٛؾ‬‫ثب‬ٜ‫اؾتفبز‬‫اظ‬‫خبٚااؾىطیپت‬
‫چٍٍٛ٘ی‬ٝ‫ث‬ ‫ضؾیسٌی‬I/Oٍ‫تٛؾ‬‫٘ٛز‬‫ؾطٚض‬ ‫ضٚی‬
ٝٔ‫ثط٘ب‬ ‫اظ‬ ‫ٔٙظٛض‬‫وبضثطزی‬ ‫ٞبی‬DIRTyٖ‫آ‬ ‫ذٛة‬ ‫تٙبؾت‬ ‫ػّت‬ ٚ ،‫ثب‬ ‫ٞب‬‫٘ٛز‬
1
asynchronous
2
evented, event-driven
3
javascript
4
network applications
5
non-blocking
6
real-time
7
data-intensive
4
‫چٙس‬ٝ‫پبی‬ َ‫ٔثب‬
‫ؾٕت‬ ٝ‫ث‬ ‫ضا‬ ٖ‫تٛخٟٕب‬ ‫اثتسا‬‫خبٚااؾىطیپت‬...ٓ‫ثجطی‬
7.7‫بٌا‬‫بر‬ ُ‫ضذ‬‫جاٍااسکریپت‬
‫خبٚااؾىطیپت‬‫یىی‬‫اظ‬‫ٔحجٛة‬ٗ‫تطی‬ٖ‫ظثب‬‫ٞبی‬ٝٔ‫ثط٘ب‬.‫اؾت‬ ٖ‫خٟب‬ ‫٘ٛیؿی‬ٝٔ‫ثط٘ب‬ ٖٛٙ‫تبو‬ ‫اٌط‬‫٘ٛیؿی‬‫اختٙبة‬ ،‫ثبقیس‬ ٜ‫زاز‬ ْ‫ا٘دب‬ ‫ٚة‬ ‫ثطای‬ ‫ای‬.‫اؾت‬ ‫٘بپصیط‬
‫خبٚااؾىطیپت‬‫ؾجت‬ ٝ‫ث‬ ،‫٘فٛش‬‫ثبالی‬‫ضٚیبی‬ ،‫ٚة‬"ٕٝٞ ،‫ثٙٛیؽ‬ ‫یىجبض‬ٗ‫و‬ ‫اخطا‬ ‫خب‬"ٝ‫و‬ ‫ضا‬Java‫زض‬ ٚ ٝ‫ٌصقت‬ ‫زض‬ٝٞ‫ز‬‫ی‬1990‫ٔیالزی‬ٜ‫ثطآٚضز‬ ‫زاقت‬
.‫اؾت‬ ٜ‫وطز‬
‫ا٘مالة‬ ٖ‫ظٔب‬ ‫حٛاِی‬ ‫زض‬AJAX‫زض‬2005،‫خبٚااؾىطیپت‬‫تؼجیطی‬ ٝ‫ث‬ ٚ ‫اثتسایی‬ ٖ‫ظثب‬ ‫یه‬ ‫اظ‬"‫اؾجبة‬‫ثبظی‬"ٝٔ‫ثط٘ب‬ ٖ‫آ‬ ‫ثب‬ ٝ‫و‬ ‫قس‬ ‫ظثب٘ی‬ ٝ‫ث‬ ُ‫تجسی‬‫ٞبی‬
‫ٔی‬ ‫خسی‬ ٚ ‫حمیمی‬‫٘ٛقتٙس‬ٝٔ‫ثط٘ب‬ ٗ‫اِٚی‬ ‫اظ‬ ‫ثطذی‬ .‫شوط‬ ُ‫لبث‬ ‫ٞبی‬Google MapsٚGmailٝٔ‫ثط٘ب‬ ‫اظ‬ ‫فطاٚا٘ی‬ ‫تؼساز‬ ٖٛٙ‫او‬ ‫أب‬ ،‫ثٛز٘س‬‫ٞبی‬
‫تحت‬‫اظ‬ ،‫ٞؿتٙس‬ ‫ٚة‬Twitter‫تب‬ ٝ‫ٌطفت‬Facebook‫تب‬GitHub.
ٝ‫اضائ‬ ٖ‫ظٔب‬ ‫اظ‬‫ی‬ْٚ‫وط‬ ٌٌُٛ‫اٚاذط‬ ‫زض‬2008،‫وبضایی‬1
‫خبٚااؾىطیپت‬‫قطوت‬ ٗ‫ثی‬ ٗ‫ؾٍٙی‬ ‫ضلبثت‬ ‫ػّت‬ ٝ‫ث‬ٝ‫ػطي‬ ‫ٞبی‬،‫(ٔٛظیال‬ ‫ٔطٚضٌط‬ ٜ‫وٙٙس‬
‫٘طذ‬ ‫ثب‬ )ٌٌُٛ ٚ ،‫ُپطا‬‫ا‬ ،ُ‫َپ‬‫ا‬ ،‫ٔبیىطٚؾبفت‬‫ی‬.‫اؾت‬ ٝ‫یبفت‬ ‫ثٟجٛز‬ ‫ثبٚض٘ىط٘ی‬ ٚ ‫ؾطیغ‬‫وبضایی‬ٗ‫ٔبقی‬ ٗ‫ای‬ِ‫ی‬‫ٔدبظ‬ ‫ٞبی‬‫خبٚااؾىطیپت‬(‫ٔدبظی‬ ٗ‫ٔبقی‬
‫خبٚااؾىطیپت‬ْ‫٘ط‬ ‫یه‬‫افعاض‬ٖ‫آ‬ ٚ ُ‫تجسی‬ ٗ‫ٔبقی‬ ٖ‫ظثب‬ ٝ‫ث‬ ‫ضا‬ ‫خبٚااؾىطیپت‬ ‫وس‬ ٝ‫و‬ ‫اؾت‬‫ٔی‬ ‫اخطا‬ ‫ضا‬‫وٙس‬-ِ‫ح‬‫تٛيی‬ُٝ‫حی‬ ‫اظ‬ ‫ٔدبظی‬ ٗ‫ٔبقی‬ ْٟٛ‫ٔف‬ٗ‫ای‬ ‫ی‬
‫٘یؿت‬ ٖ‫آ‬ ٝ‫ث‬ ‫٘یبظی‬ ‫وتبة‬ ٗ‫ای‬ ‫اظ‬ ٜ‫اؾتفبز‬ ‫ثطای‬ ٚ ‫اؾت‬ ‫ذبضج‬ ‫وتبة‬)ً‫ب‬‫حمیمت‬ٝٔ‫ثط٘ب‬ ‫٘ٛع‬ ٖ‫زاز‬ ‫تغییط‬ َ‫حب‬ ‫زض‬‫وبضثطزی‬ ‫ٞبی‬‫ٔی‬ ٝ‫و‬ ‫ای‬‫ٚة‬ ‫ضٚی‬ ‫تٛا٘یس‬
.‫ٞؿتٙس‬ ‫وٙیس‬ ‫تِٛیس‬‫یه‬َ‫ٔثب‬ً‫ب‬‫حمیمت‬ ٚ ،ٝ‫تٛخ‬ ُ‫لبث‬ ‫ثؿیبض‬ٜ‫ذیط‬‫ٔٛيٛع‬ ٗ‫ای‬ ‫اظ‬ ٜ‫وٙٙس‬jslinux‫اؾت‬(http://bellard.org/jslinux/)‫؛‬‫یه‬
ٝ‫قجی‬‫قرهی‬ ‫وبٔپیٛتط‬ ‫ؾبظ‬،ٝ‫٘ٛقت‬ٜ‫قس‬ٖ‫ظثب‬ ‫ثب‬‫خبٚااؾىطیپت‬،ٝ‫و‬‫ٔی‬‫تٛا٘یس‬ٝ‫ٞؿت‬ ‫یه‬‫ثبضٌص‬ ٖ‫آ‬ ‫ضٚی‬ ‫ضا‬ ‫ِیٙٛوؽ‬ ‫ی‬‫ثب‬ ،‫وٙیس‬ ‫اضی‬ٝ٘‫پبیب‬ ‫٘كؿت‬2
ُٔ‫تؼب‬
ٝٔ‫ثط٘ب‬ ‫یه‬ ٚ ،‫وٙیس‬‫ی‬Cٕٝٞ ٚ ،‫وٙیس‬ ُ‫وبٔپبی‬ ‫ضا‬ٗ‫ای‬ ‫ی‬‫ٔی‬ ‫اتفبق‬ ‫قٕب‬ ‫ٔطٚضٌط‬ ٖٚ‫زض‬ ‫زض‬ ‫ٞب‬.‫افتس‬
ٝٔ‫ثط٘ب‬ ‫ثطای‬ ‫٘ٛز‬‫اظ‬ ‫ؾطٚض‬ ‫ؾٕت‬ ‫٘ٛیؿی‬V8‫ٔدبظی‬ ٗ‫ٔبقی‬ ،‫لسضت‬ ْٚ‫وط‬ ٌٌُٛ ٝ‫و‬ ‫ای‬‫ٔی‬ ٜ‫اؾتفبز‬ ،‫اؾت‬ ٖ‫آ‬ ‫اظ‬ ٝ‫ٌطفت‬.‫وٙس‬V8‫وبضایی‬ً‫ا‬‫قسیس‬ ‫ضا‬ ‫٘ٛز‬
‫اضتمبء‬‫ٔی‬ٝ‫و‬ ‫چطا‬ ،‫زٞس‬ُٝ‫ٚاؾ‬‫حصف‬ ‫ضا‬،‫وس‬ ٝ‫ث‬ ٓ‫ٔؿتمی‬ ُ‫وبٔپبی‬ ٚ‫ٔبزضی‬ٗ‫ٔبقی‬3
‫ثبیت‬ ‫اخطای‬ ‫ثط‬ ‫ضا‬‫وس‬4
‫ٔفؿط‬ ‫اظ‬ ٜ‫اؾتفبز‬ ‫یب‬5
‫ٔی‬ ‫تطخیح‬‫ػّت‬ ٝ‫ث‬ .‫زٞس‬
ٜ‫اؾتفبز‬‫٘ٛز‬ ‫ی‬:‫اؾت‬ ٓٞ‫فطا‬ ‫٘یع‬ ‫زیٍطی‬ ‫ٔعایبی‬ ،‫ؾطٚض‬ ‫ؾٕت‬ ‫زض‬ ‫خبٚااؾىطیپت‬ ‫اظ‬
ٝ‫تٛؾؼ‬ٔ ٖ‫زٞٙسٌب‬‫ی‬ٝٔ‫ثط٘ب‬ ‫تٛا٘ٙس‬‫تحت‬ ‫وبضثطزی‬ ‫ٞبی‬‫وبٞف‬ ‫َطیك‬ ‫اظ‬ ٝ‫و‬ ،‫ثٙٛیؿٙس‬ ٖ‫ظثب‬ ‫یه‬ ‫ثب‬ ‫ضا‬ ‫ٚة‬ِ‫ى‬‫تؼٛی‬ٝٙ‫ظٔی‬ٝ‫تٛؾؼ‬ ٗ‫ثی‬ٚ ‫والیٙت‬ ‫ی‬
ٝ‫تٛؾؼ‬‫ی‬‫اقتطان‬ ٝ‫ث‬ ٖ‫أىب‬ ٚ ،‫ؾطٚض‬‫ؾطٚض‬ ٚ ‫والیٙت‬ ٗ‫ثی‬ ‫وس‬ ‫ٌعاضی‬ٜ‫اؾتفبز‬ ُ‫(ٔث‬‫ثطای‬ ٖ‫یىؿب‬ ‫وس‬ ‫اظ‬ ‫ٔدسز‬ ‫ی‬‫اػتجبضؾٙدی‬ْ‫فط‬ ‫ٚضٚزی‬‫ٞب‬
ِ‫ك‬ُٙٔ ‫یب‬6
‫وٕه‬ ،)‫ثبظی‬.‫اؾت‬ ٜ‫وٙٙس‬
JSON‫ٔحجٛة‬ ‫ثؿیبض‬ ‫فطٔت‬ ‫یه‬ ٜ‫أطٚظ‬ٚ ‫اؾت‬ ٜ‫زاز‬ َ‫تجبز‬ ‫ثطای‬‫فطٔت‬ ٗ‫ای‬‫خبٚااؾىطیپت‬ ‫زض‬‫خعئی‬ٖ‫ظثب‬ ‫ذٛز‬ ‫اظ‬.‫اؾت‬
ٜ‫پبیٍب‬ ‫زض‬ ٜ‫اؾتفبز‬ ‫ٔٛضز‬ ٖ‫ظثب‬ ‫خبٚااؾىطیپت‬ٜ‫زاز‬‫ٞبی‬NoSQL‫ٌٛ٘بٌٛ٘ی‬‫اؾت‬ُ‫(ٔث‬CouchDBٚMongoDBٗ‫ثٙبثطای‬ ،)ٟٝ‫ٔٛاخ‬
ٖ‫آ‬ ‫ثب‬‫ٞب‬‫اؾت‬ ‫َجیؼی‬ ‫تٙبؾت‬ ‫زاضای‬(َ‫ٔثب‬ ‫ثطای‬،‫پطؼ‬ ٖ‫ظثب‬ٚٛ‫خ‬7
ِٚ‫ق‬ُِ8
MongoDBٗ‫ٕٞچٙی‬ ‫؛‬map/reduce‫زض‬CouchDB،
1
performance
2
terminal session
3
native machine code
4
bytecode
5
interpreter
6
logic
7
query
8
shell
5
‫ٞؿتٙس‬ ‫خبٚااؾىطیپت‬).
‫یه‬ ‫خبٚااؾىطیپت‬ِ‫ف‬‫ٞس‬ُ‫وبٔپبی‬ٖ‫ظثب‬ ‫اظ‬ ‫تؼسازی‬ ٚ ،‫اؾت‬‫ٔی‬ ُ‫وبٔپبی‬ ٖ‫آ‬ ٝ‫ث‬ ٝ‫و‬ ‫ٞؿتٙس‬ ‫حبظط‬ َ‫حب‬ ‫زض‬ ‫ٞب‬.‫قٛ٘س‬
‫(ٔی‬ٝ‫ث‬ ‫تٛا٘یس‬"‫فٟطؾت‬ٖ‫ظثب‬ٝ‫ث‬ ٝ‫و‬ ‫ٞبیی‬JS‫ٔی‬ ُ‫وبٔپبی‬‫قٛ٘س‬"‫آزضؼ‬ ٗ‫ای‬ ‫زض‬:‫وٙیس‬ ٝ‫ٔطاخؼ‬
https://github.com/jashkenas/coffe-script/wiki/List-of-languages-that-compile-to-JS)
‫ٔی‬ ٜ‫اؾتفبز‬ ‫ٔدبظی‬ ٗ‫ٔبقی‬ ‫یه‬ ‫اظ‬ ‫٘ٛز‬‫وٙس‬(V8)‫ثب‬ ‫ضا‬ ‫ذٛز‬ ٝ‫و‬‫اؾتب٘ساضز‬ECMAScript‫ُٔٙجك‬‫ٔی‬‫وٙس‬.ٝ‫و‬ ‫٘یؿتیس‬ ‫ٔدجٛض‬ ،‫زیٍط‬ ٖ‫ظثب‬ ٝ‫ث‬
‫اظ‬ ٜ‫اؾتفبز‬ ٖ‫أىب‬ ‫تب‬ ‫وٙٙس‬ ‫ضٚظ‬ ٝ‫ث‬ ‫ضا‬ ‫ذٛز‬ ‫ٔطٚضٌطٞب‬ ْ‫تٕب‬ ‫تب‬ ‫وٙیس‬ ‫نجط‬‫ٚیػٌی‬‫خبٚااؾىطیپت‬ ٖ‫ظثب‬ ‫خسیس‬ ‫ٞبی‬.‫ثبقیس‬ ٝ‫زاقت‬ ‫٘ٛز‬ ‫زض‬ ‫ضا‬
ٝ‫٘ؿر‬ ،ٖ‫ظٔب‬ ‫اظ‬ ٝ‫ِحظ‬ ٗ‫ای‬ ‫زض‬ ٝ‫اِجت‬ :ٜ‫(ٍ٘بض٘س‬ٝ‫٘ؿر‬ ٗ‫آذطی‬ ‫اظ‬ ‫٘ٛز‬ ‫فؼّی‬ ‫ی‬‫ی‬v8‫ٕ٘ی‬ ٜ‫اؾتفبز‬)‫وٙس‬
(‫اؾتب٘ساضز‬ ‫ٔٛضز‬ ‫زض‬ ‫ثیكتط‬ ‫اَالػبت‬ ‫ثطای‬ECMAScript،‫ٔی‬‫تٛا٘یس‬‫وٙیس‬ ٝ‫ٔطاخؼ‬:ٝ‫ث‬
http://en.wikipedia.org/wiki/ECMAScript)
‫ٔی‬ ‫وؿی‬ ٝ‫چ‬‫خبٚا‬ ٝ‫و‬ ‫زا٘ؿت‬‫اؾىطیپت‬‫ظثب٘ی‬‫خصاة‬‫خبِت‬ ٚٝٔ‫ثط٘ب‬ ٗ‫٘ٛقت‬ ‫ثطای‬‫ٞبی‬‫ثكٛز‬ ‫ؾطٚض‬ ‫ؾٕت‬‫؟‬‫اؾبؼ‬ ‫ثط‬،‫٘فٛش‬‫وبضایی‬ٝ‫ثمی‬ ٚ ،‫ی‬
ُ‫لج‬ ٝ‫و‬ ‫ذهٛنیبتی‬‫شوط‬ ‫تط‬‫اظ‬ ‫ظیبزی‬ ٖ‫ٔیعا‬ ‫٘ٛز‬ ،‫قس‬ٝ٘‫پكتٛا‬‫ٔٛفمیت‬ ‫ثطای‬‫ضا‬.‫اؾت‬ ٜ‫آٚضز‬ ‫ثسؾت‬‫یه‬ ‫تٟٙب‬ ‫خبٚااؾىطیپت‬ ٝ‫و‬ ‫زاقت‬ ٝ‫تٛخ‬ ‫ثبیس‬ ٝ‫اٌطچ‬
ٜٛ‫قی‬ .‫اؾت‬ َ‫پبظ‬ ‫اظ‬ ٝ‫لُؼ‬‫ٔی‬ ٜ‫اؾتفبز‬ ‫خبٚااؾىطیپت‬ ‫اظ‬ ‫٘ٛز‬ ٝ‫و‬ ‫ای‬‫حتی‬ ‫وٙس‬‫خبِت‬‫ؾطاؽ‬ ٝ‫ث‬ ،‫٘ٛز‬ ٍ‫ٔحی‬ ‫زضن‬ ‫ثطای‬ .‫اؾت‬ ‫تط‬‫یه‬ٍ‫ٔحی‬ٝ‫ث‬ ٌٛ‫ٔطث‬
‫خبٚااؾىطیپت‬‫ٔی‬.‫ٔطٚضٌط‬ :‫زاضیس‬ ‫آقٙبیی‬ ٖ‫آ‬ ‫ثب‬ ٕٝٞ ‫اظ‬ ‫ثیف‬ ٝ‫و‬ ٓ‫ضٚی‬
7.2ٍ ‫آسٌکرٍى‬‫رخذادهحَر‬‫هرٍرگر‬ :
ٚ ٖٚ‫آؾٙىط‬ ْ‫پّتفط‬ ‫یه‬ ‫٘ٛز‬‫ضذساز‬‫ٔحٛض‬ِ‫ت‬‫خبٚااؾىطیپ‬ ‫ثطای‬‫ٔی‬ ٓٞ‫فطا‬ ‫ؾطٚض‬ ‫ؾٕت‬‫ث‬ ٝ‫ٔكبث‬ ‫ثؿیبض‬ .‫وٙس‬‫ب‬ٛ‫٘ح‬ٜ‫ای‬‫ی‬‫زض‬ ‫ضا‬ ‫خبٚااؾىطیپت‬ ‫ٔطٚضٌط‬ ٝ‫و‬
‫ٔی‬ ٓٞ‫فطا‬ ‫والیٙت‬،‫آٚضز‬‫٘ٛز‬ٖ‫آ‬ٓٞ‫فطا‬ ‫ؾطٚض‬ ‫زض‬ ‫ضا‬‫ٔی‬.‫آٚضز‬ٗ‫ای‬ ‫زضن‬‫ٔی‬ ‫وبض‬ ٍٝ٘ٛ‫چ‬ ‫ٔطٚضٌط‬ ٝ‫و‬ٗ‫ای‬ ‫زضن‬ ‫ثطای‬ ،‫وٙس‬‫ٔی‬ ‫وبض‬ ٍٝ٘ٛ‫چ‬ ‫٘ٛز‬ ٝ‫و‬ٟٓٔ ‫وٙس‬
ٚ‫ز‬ ‫ٞط‬ .‫اؾت‬‫ضذسازٔحٛض‬‫ٞؿتٙس‬‫(اظ‬‫یه‬ٝ‫حّم‬‫ی‬‫ضذساز‬‫ٔی‬ ٜ‫اؾتفبز‬)‫وٙٙس‬،ٚٝ‫ث‬ ‫ضؾیسٌی‬ ٖ‫ظٔب‬ ‫زض‬I/O،‫ٔؿسٚز‬ ‫غیط‬‫(اظ‬ ‫ٞؿتٙس‬ ٜ‫وٙٙس‬I/Oٖٚ‫آؾٙىط‬
‫ٔی‬ ٜ‫اؾتفبز‬)‫وٙٙس‬.ٔ ‫یه‬ ٝ‫ث‬ ‫ُّٔت‬ ‫تٛيیح‬ ‫ثطای‬‫ٔی‬ ٜ‫ٍ٘ب‬ َ‫ثب‬.ٓ‫وٙی‬
ِ‫حلق‬‫ّای‬‫رخذاد‬ٍI/O‫آسٌکرٍى‬ٝ‫ُٔبِؼ‬ ‫ثطای‬ٝ‫حّم‬ ‫ٔٛضز‬ ‫زض‬ ‫ثیكتط‬ ‫ُٔبِت‬ ‫ی‬‫ٞبی‬‫ضذساز‬ٚI/O‫زض‬ َٝٛ‫ٔطث‬ ‫ٔمبالت‬ ٝ‫ث‬ ،ٖٚ‫آؾٙىط‬
Wikipedia‫آزضؼ‬ ‫زض‬‫ٞبی‬http:// en.wikipedia.org/wiki/Event_loopٚhttp://
en.wikipedia.org/wiki/Asynchronous_I/O.‫وٙیس‬ ٝ‫ٔطاخؼ‬
ٝ‫لُؼ‬ ٗ‫ای‬ٜ‫وٛتب‬ ‫وس‬ْٛ‫ٔطؾ‬‫زض‬jQuery‫ضا‬‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬ ٝ‫و‬XMLHttp-Request(XHR)‫زضذٛاؾت‬ ‫یه‬AJAX‫ٔی‬ ‫اخطا‬ ‫ضا‬‫وٙس‬‫زض‬‫٘ظط‬
‫ثٍیطیس‬:
ٝٔ‫ثط٘ب‬ ٗ‫ای‬ِ‫ت‬‫زضذٛاؾ‬ ‫یه‬HTTP‫ثطای‬resource.json‫ٔی‬ ‫اخطا‬ ‫ضا‬،‫پبؾد‬ ‫ثبظٌكت‬ ‫اظ‬ ‫پؽ‬ .‫وٙس‬ْ‫٘ب‬ ٖٚ‫ثس‬ ‫تبثؼی‬ٍ‫قطای‬ ٗ‫ای‬ ‫(زض‬"َ‫وب‬‫ثه‬"1
‫ٔی‬ ٜ‫ذٛا٘س‬)‫قٛز‬‫ٔی‬ ‫فطاذٛا٘ی‬‫قٛز‬ْ‫٘ب‬ ‫ثب‬ ‫آضٌٛٔب٘ی‬ ‫زاضای‬ ٝ‫و‬dataٜ‫زاز‬ ٝ‫و‬ ،‫اؾت‬‫زضیبفت‬ ‫ی‬.‫اؾت‬ ‫زضذٛاؾت‬ ‫خٛاة‬ ‫زض‬ ٜ‫قس‬
ٝ‫ث‬ ‫وس‬ ٝ‫و‬ ‫وٙیس‬ ٝ‫تٛخ‬‫قىّی‬ ٗ‫چٙی‬:‫٘كس‬ ٝ‫٘ٛقت‬
1
callback
12
‫یه‬"ِ‫ض‬ٚ‫ؾط‬ِ‫ة‬ٚ"1
ً‫ب‬‫انُالح‬Hello World(‫ٌبٞی‬ ٝ‫و‬ ‫انُالحی‬‫آٔٛظقی‬ ٖٛ‫ٔت‬ ‫زض‬ٝٔ‫ثط٘ب‬ ‫ثطای‬ٜ‫اؾتفبز‬ ‫اؾت‬ ٜ‫ؾبز‬ ‫ثؿیبض‬ ٝ‫و‬ َٚ‫ا‬ ‫ی‬
‫ٔی‬‫ػجبضت‬ )ٝ‫ٕٞیك‬ ‫(یب‬ ‫اغّت‬ ٚ ‫قٛز‬hello wordٝ‫ث‬ ‫ضا‬‫ٔی‬ ‫ذطٚخی‬ ٖ‫ػٙٛا‬‫زٞس‬)
ٖ‫خطیب‬ ‫اظ‬ ‫ٔثبِی‬‫ٞب‬2
‫ٔی‬ ‫ٍ٘بٞی‬ ‫اثتسا‬ٝٔ‫ثط٘ب‬ ‫یه‬ ٝ‫ث‬ ٓ‫وٙی‬.ٜ‫ؾبز‬ ٖٚ‫آؾٙىط‬ ‫ی‬
7.5.7ُ‫ساد‬ ‫هثال‬ ‫یک‬‫آسٌکرٍى‬ ‫ی‬
‫ثرف‬ ‫زض‬1.2َ‫ٔثب‬ ٗ‫ای‬ ،Ajax‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬JQuery:ٓ‫زیسی‬ ‫ضا‬
ٖ‫آ‬ ٝ‫ٔكبث‬ ‫وبضی‬ ‫حبال‬‫ٔی‬ ْ‫ا٘دب‬ ‫٘ٛز‬ ‫زض‬ ‫ضا‬َٚ‫ٔبغ‬ ‫اظ‬ ٖ‫آ‬ ‫ثدبی‬ ‫أب‬ ،ٓ‫زٞی‬fs‫(ٔرفف‬filesystem)‫ثبضٌص‬ ‫ثطای‬‫اضی‬resource.json‫ضٚی‬ ‫اظ‬
‫ٔی‬ ٜ‫اؾتفبز‬ ‫زیؿه‬ٗ‫ای‬ ٝ‫ث‬ ‫وٙیس‬ ٝ‫تٛخ‬ .ٓ‫وٙی‬َ‫ٔثب‬ ٝ‫ث‬ ٝ‫قجی‬ ٝٔ‫ثط٘ب‬ ٗ‫ای‬ ‫چمسض‬ ٝ‫و‬jQuery.‫اؾت‬ ‫لجّی‬
ُ‫فبی‬ ،ٝٔ‫ثط٘ب‬ ٗ‫ای‬ ‫زض‬resource.json‫ٔی‬ ‫زیؿه‬ ‫ضٚی‬ ‫اظ‬ ‫ضا‬ٛ‫ذ‬ ٜ‫زاز‬ ْ‫تٕب‬ ٝ‫و‬ ‫ٍٞٙبٔی‬ .ٓ‫ذٛا٘ی‬‫ثب‬ ٝ‫(و‬ ْ‫٘ب‬ ٖٚ‫ثس‬ ‫تبثغ‬ ‫یه‬ ،‫قس‬ ٜ‫ا٘س‬ٖ‫ػٙٛا‬
َ‫وب‬‫ٔی‬ ٝ‫قٙبذت‬ ٓٞ ‫ثه‬‫قٛز‬‫ٔی‬ ‫فطاذٛا٘ی‬ )‫قٛز‬ٖ‫آضٌٛٔب‬ ‫زاضای‬ ‫تبثغ‬ ٗ‫ای‬ .‫ٞبی‬er‫ثطای‬ٚ ،‫احتٕبِی‬ ‫ذُبی‬dataٜ‫زاز‬ ٝ‫و‬،‫اؾت‬ ُ‫فبی‬ ‫ٞبی‬
‫ٔی‬‫ٔی‬ ٝ‫حّم‬ ٝٙ‫نح‬ ‫پكت‬ ‫زض‬ ‫فطایٙس‬ .‫ثبقس‬ٜ‫زاز‬ ٝ‫و‬ ‫ظٔب٘ی‬ ‫تب‬ ،‫وٙس‬ ‫ضؾیسٌی‬ ‫ثیبیس‬ ٝ‫و‬ ‫زیٍطی‬ ‫ػّٕیبت‬ ‫ٞط‬ ٝ‫ث‬ ‫اؾت‬ ‫لبزض‬ ٚ ،‫ظ٘س‬ٜ‫آٔبز‬ ‫٘ظط‬ ‫ٔٛضز‬ ‫ی‬
ٝ‫ث‬ ٌٛ‫ٔطث‬ ‫ٔعایبی‬ ْ‫تٕب‬ .‫قٛز‬‫ضذسازٔحٛض‬ٖ‫ثٛز‬ ٖٚ‫آؾٙىط‬ ُٚ‫لج‬ ٝ‫و‬‫ذٛز‬ ٓ‫وطزی‬ ‫نحجت‬ ‫ٔٛضزـ‬ ‫زض‬ ‫تط‬ٝ‫ث‬.‫ٞؿتٙس‬ ٖ‫خطیب‬ ‫زض‬ ‫ذٛز‬ٗ‫ای‬ ‫تفبٚت‬‫زض‬ ‫خب‬
ٝ‫ث‬ ٝ‫و‬ ‫اؾت‬ ٗ‫ای‬‫زضذٛاؾت‬ ‫یه‬ ْ‫ا٘دب‬ ‫خبی‬Ajax‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬ ‫ٔطٚضٌط‬ ‫َطف‬ ‫اظ‬JQuery،‫اظ‬filesystem‫ٔی‬ ٜ‫اؾتفبز‬ ‫٘ٛز‬ ‫زض‬‫تب‬ ٓ‫وٙی‬
resource.jsonُ‫قى‬ ‫زض‬ ُٕ‫ػ‬ ٗ‫ای‬ .ٓ‫ثٍیطی‬ ‫ضا‬1.5.‫اؾت‬ ٜ‫قس‬ ٜ‫زاز‬ ‫ٕ٘بیف‬
1
web server
2
streams
13
7.5.2"ِ‫ر‬ٍ‫سر‬HTTPِ"ُ‫ساد‬،‫خرٍجی‬ ‫با‬Hello World
ِ‫ز‬‫ٔٛض‬ ‫یه‬-‫٘ٛز‬ ‫ثطای‬ ‫ضایح‬ ‫ثؿیبض‬ ‫وبضثطز‬،ٗ‫ؾبذت‬ ‫ؾطٚض‬‫ٔی‬ ٜ‫ؾبز‬ ‫ثؿیبض‬ ‫ضا‬ ‫ؾطٚضٞب‬ ‫اظ‬ ‫ٔرتّفی‬ ‫ا٘ٛاع‬ ٗ‫ؾبذت‬ ‫٘ٛز‬ .‫اؾت‬ٝ‫و‬ ‫نٛضتی‬ ‫زض‬ ،ٗ‫ای‬ .‫وٙس‬
ٝٔ‫ثط٘ب‬ ٝ‫و‬ ‫ؾطٚض‬ ‫یه‬ ٗ‫زاقت‬ ٝ‫ث‬ ‫ػبزت‬ ‫قٕب‬‫ٔی‬ ‫ٔیعثب٘ی‬ ‫ضا‬ ‫قٕب‬ ‫ی‬‫ثبقیس‬ ٝ‫زاقت‬ ‫وٙس‬ٝٔ‫ثط٘ب‬ ‫یه‬ ُ‫(ٔث‬‫ی‬PHP‫یه‬ ‫ضٚی‬ ٝ‫و‬ِ‫ض‬ٚ‫ؾط‬HTTPِ‫آپبچی‬
)ٜ‫قس‬ ‫ٔیعثب٘ی‬‫ٔی‬ ،‫تٛا٘س‬‫ػدیت‬.‫قٛز‬ ‫احؿبؼ‬ٝٔ‫ثط٘ب‬ ٚ ‫ؾطٚض‬ ،‫٘ٛز‬ ‫زض‬‫ٞؿتٙس‬ ‫یىی‬.
ِ‫ض‬ٚ‫ؾط‬ ‫یه‬ ‫اظ‬ َ‫ٔثب‬ ‫یه‬ ٗ‫ای‬HTTP‫ثب‬ ‫زضذٛاؾتی‬ ‫ٞط‬ ٝ‫ث‬ ‫ؾبزٌی‬ ٝ‫ث‬ ٝ‫و‬ ‫اؾت‬"Hello World"‫ٔی‬ ‫پبؾد‬:‫زٞس‬
‫ٔی‬ ‫اتفبق‬ ‫زضذٛاؾت‬ ‫یه‬ ‫ٚلت‬ ‫ٞط‬،‫افتس‬َ‫وب‬ِ‫ه‬‫ث‬function (req, res)‫ٔی‬ ‫فطاذٛا٘ی‬ٚ ‫قٛز‬"Hello World"ٙ‫ػ‬ ٝ‫ث‬‫ذطٚخی‬ ‫زض‬ ‫پبؾد‬ ٖ‫ٛا‬
‫ٔی‬ ٝ‫٘ٛقت‬َِ‫ٔس‬ ٗ‫ای‬ .‫قٛز‬‫ضذساز‬‫یه‬ ٝ‫ث‬ ٖ‫زاز‬ ‫ٌٛـ‬ ‫ثب‬ ٝ‫ٔكبث‬‫ضذساز‬onclick‫ٔی‬ ‫ظٔب٘ی‬ ‫ٞط‬ ‫زض‬ ‫وّیه‬ ‫یه‬ .‫اؾت‬ ‫ٔطٚضٌط‬ ‫زض‬،‫زٞس‬ ‫ضخ‬ ‫تٛا٘س‬
‫ٔی‬ ٓٞ‫فطا‬ ‫تبثغ‬ ‫یه‬ ‫قٕب‬ ٗ‫ثٙبثطای‬‫ثطای‬ ‫تب‬ ‫وٙیس‬ٗ‫ای‬ ‫زض‬ .‫وٙس‬ ‫اخطا‬ ‫ضا‬ ‫اػٕبِی‬ ٖ‫آ‬ ٝ‫ث‬ ‫ضؾیسٌی‬‫ٔی‬ ٓٞ‫فطا‬ ‫ضا‬ ‫تبثؼی‬ ‫٘ٛز‬ ،‫خب‬‫ٞط‬ ٝ‫و‬ ‫وٙس‬‫زضذٛاؾتی‬ ٖ‫ظٔب‬
.‫زٞس‬ ‫پبؾد‬ ،‫زاز‬ ‫ضخ‬
‫نطیح‬ ‫نٛضت‬ ٝ‫ث‬ ٖ‫آ‬ ‫زض‬ ‫زضذٛاؾت‬ ٝ‫و‬ ‫اؾت‬ ‫ؾطٚض‬ ٖ‫ٕٞب‬ ٗ‫٘ٛقت‬ ‫ثطای‬ ‫زیٍطی‬ ٜ‫ضا‬ ٗ‫ای‬:‫اؾت‬ ٜ‫آٔس‬ ‫زض‬ ‫تطی‬
16
‫فصل‬2
ِ‫برًاه‬ ‫یک‬ ‫ساختي‬ِ‫اتاق‬ ‫چٌذ‬ ‫چت‬ ‫ی‬
‫هی‬ ‫پَضص‬ ‫فصل‬ ‫ایي‬ ِ‫ک‬ ‫هطالبی‬‫دّذ‬
ٝ‫ث‬ ‫ٍ٘بٞی‬‫اخعاء‬‫٘ٛز‬ ‫ٔرتّف‬
ٝٔ‫ثط٘ب‬ ٕٝ٘ٛ٘ ‫یه‬‫٘ٛز‬ ‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬ ً٘‫ثالزض‬ ‫ی‬
‫والیٙت‬ ٚ ‫ؾطٚض‬ ُٔ‫تؼب‬
ُ‫فه‬ ‫زض‬1ٝ‫تٛؾؼ‬ ٝ‫و‬ ‫آٔٛذتیس‬ ،ٝ‫تٛؾؼ‬ ‫ثب‬ ‫تفبٚتی‬ ٝ‫چ‬ ‫٘ٛز‬ ‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬ ٖٚ‫آؾٙىط‬ ‫ی‬ٝٔ‫ثط٘ب‬ ‫یه‬ ٗ‫ؾبذت‬ ‫ثب‬ ،ُ‫فه‬ ٗ‫ای‬ ‫زض‬ .‫زاضز‬ ٖٚ‫ؾٙىط‬ ‫ضایح‬ ‫ی‬‫چت‬ ‫ی‬
‫وٛچه‬‫ضذساز‬ٗ‫ای‬ ‫خعئیبت‬ ‫اٌط‬ ‫٘جبقیس‬ ٖ‫ٍ٘طا‬ .‫زاقت‬ ٓ‫ذٛاٞی‬ ‫٘ٛز‬ ٝ‫ث‬ ‫ػّٕی‬ ٜ‫ٍ٘ب‬ ‫یه‬ ،‫ٔحٛض‬‫ٔی‬ ‫٘ظط‬ ٝ‫ث‬ ‫زقٛاض‬ ٖ‫ثطایتب‬ ُ‫فه‬.‫آیس‬
:ٜ‫(ٍ٘بض٘س‬ٖ‫آ‬ ‫اظ‬ٜ‫اؾتفبز‬ ‫ُٔبِت‬ ‫اظ‬ ‫ثطذی‬ ‫تٛيیح‬ ٝ‫و‬ ‫خب‬ُ‫فه‬ ٗ‫ای‬ ‫زض‬ ٜ‫قس‬،‫آٔس‬ ‫ذٛاٞس‬ ‫ثؼس‬ َٛ‫فه‬ ‫زض‬ٝ‫ُٔبِؼ‬ ‫قبیس‬ٗ‫ای‬ ٝ‫ث‬ ُ‫فه‬ ٗ‫ای‬ ‫ی‬‫ٔٙبؾت‬ ‫نٛضت‬
ٝ‫ُٔبِؼ‬ ‫ثبض‬ ‫یه‬ ٝ‫و‬ ‫ثبقس‬‫قٛز‬‫حسی‬ ‫تب‬ ٚ‫ثٛزیس‬ ُ‫ٔبی‬ ٝ‫و‬‫ثكٛز‬ ٖ‫آ‬ ٟٓ‫ف‬ ‫زض‬ ‫ؾؼی‬،ٝ‫ُٔبِؼ‬ ‫اظ‬ ‫پؽ‬ ٌ‫ا‬‫ثؼس‬ ُٚ‫فه‬ ‫ی‬3ٚ4ً‫ا‬‫ٔدسز‬‫ثكٛز‬ ٖ‫آ‬ ٝ‫ث‬ ‫ٍ٘بٞی‬‫؛‬ٝ‫ث‬ ‫أب‬
ٝ‫٘ىت‬ َ‫حب‬ ‫ٞط‬‫ٞیچ‬ ٝ‫ث‬ ُ‫فه‬ ٗ‫ای‬ ‫ُٔبِت‬ ‫زضن‬ ْ‫ػس‬ ٝ‫و‬ ‫اؾت‬ ٗ‫ای‬ ٟٓٔ ‫ی‬‫٘ىٙس‬ ٖ‫ٍ٘طا‬ ‫ضا‬ ‫قٕب‬ ٝ‫ٚخ‬‫٘جبقس‬ ُ‫فه‬ ٗ‫ای‬ ‫زض‬ ‫قٕب‬ ‫حس‬ ‫اظ‬ ‫ثیف‬ ‫تٛلف‬ ‫ثبػث‬ ٚ–
ٝ‫٘ؿر‬ ٝ‫و‬ ‫اؾت‬ ‫شوط‬ ٝ‫ث‬ ْ‫الظ‬ ً‫ب‬ٕٙ‫ي‬‫اظ‬ ٜ‫اؾتفبز‬ ‫ٔٛضز‬ ‫ی‬Socket.IOٝ‫٘ؿر‬ ُ‫فه‬ ٗ‫ای‬ ‫زض‬‫یب‬ ‫اضتمبء‬ ‫حبيط‬ َ‫حب‬ ‫زض‬ ٝ‫و‬ ‫اؾت‬ ‫ای‬‫تغییط‬ ٚ ٝ‫فت‬‫اتی‬ٜ‫وطز‬
‫اؾت‬ٗ‫ثٙبثطای‬ ،‫ٔی‬ ‫پیكٟٙبز‬‫قٛز‬‫زضنٛضتی‬ٝ‫٘ؿر‬ ‫زاضیس‬ ‫ضا‬ ٖ‫آ‬ ‫یبزٌیطی‬ ‫لهس‬ ٝ‫و‬‫اضتم‬ ‫ی‬‫فطاثٍیطیس‬ ‫ضا‬ ٝ‫یبفت‬ ‫بء‬ٖ‫آ‬ ٝ‫ث‬ ٌٛ‫ٔطث‬ ‫وسٞبی‬ ٚ‫زضن‬ ‫حس‬ ‫زض‬ ‫تٟٙب‬ ‫ضا‬
‫وّی‬‫وٙیس‬ ٝ‫ُٔبِؼ‬ ‫ػّٕىطز‬)
ٝ‫تدطث‬ ‫قٕب‬ ٝ‫و‬ ‫اؾت‬ ٗ‫ای‬ ‫ثط‬ ‫فطيف‬ ُ‫فه‬ ٗ‫ای‬ٝ‫تٛؾؼ‬ ‫ی‬ٝٔ‫ثط٘ب‬ ‫ی‬‫ٔی‬ ‫زاضا‬ ‫ضا‬ ‫ٚة‬ ‫ی‬،‫ثبقیس‬ٝ‫پبی‬ ‫زضن‬ ‫زاضای‬‫اظ‬ ‫ای‬HTTP‫ثب‬ ٚ ،‫ٞؿتیس‬jQuery
‫آقٙبیی‬‫ذٛثی‬.‫زاضیس‬ٗ‫ای‬ ٗ‫حی‬ ‫زض‬‫ٔی‬ ّٛ‫خ‬ ٝ‫ث‬ ُ‫فه‬ ٗ‫ای‬ ‫زض‬ ٝ‫و‬:‫وطز‬ ‫ذٛاٞیس‬ ٝ‫تدطث‬ ‫ضا‬ ‫ٔٛاضز‬ ٗ‫ای‬ ‫ضٚیس‬
ٗ‫ای‬ ٖ‫زیس‬ ٚ ٝٔ‫ثط٘ب‬ ٝ‫ث‬ ‫ٔطٚضی‬ ‫ٍ٘بٞی‬‫وطز‬ ‫ذٛاٞس‬ ‫وبض‬ ٍٝ٘ٛ‫چ‬ ٝ‫و‬
‫٘یبظٔٙسی‬ ‫ٔطٚض‬ٜ‫آٔبز‬ ْ‫ا٘دب‬ ٚ ‫فٙی‬ ‫ٞبی‬ٝٔ‫ثط٘ب‬ ‫ثطای‬ ٝ‫اِٚی‬ ‫ؾبظی‬
ٖ‫زاز‬ ٝ‫اضائ‬HTML،CSSٚ ،JavaScriptِ‫ؾطٚض‬ ٍ‫تٛؾ‬ ،‫وبضثط‬ ‫ؾٕت‬
‫ضؾیسٌی‬‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬ ‫چت‬ ٝ‫ث‬ ٌٛ‫ٔطث‬ ْ‫پیب‬ َ‫تجبز‬ ٝ‫ث‬Socket.IO
ٝٔ‫ثط٘ب‬ ‫وبضثطی‬ ٍ‫ٚاؾ‬ ‫ثطای‬ ‫وبضثط‬ ‫ؾٕت‬ ‫خبٚااؾىطیپت‬ ‫اظ‬ ٜ‫اؾتفبز‬
11
‫ٔی‬ ‫قطٚع‬ ٝٔ‫ثط٘ب‬ ‫ثط‬ ‫ٔطٚضی‬ ‫ثب‬ٓ‫وٙی‬—ٝ‫و‬ ‫زیس‬ ‫ذٛاٞیس‬ٝٔ‫ثط٘ب‬،‫اؾت‬ ٜ‫قس‬ ُ‫تىٕی‬ ٝ‫و‬ ‫ظٔب٘ی‬ ‫زض‬‫ذٛاٞس‬ ‫قىّی‬ ٝ‫چ‬‫زاقت‬.‫ثٛز‬ ‫ذٛاٞس‬ ٍٝ٘ٛ‫چ‬ ‫ضفتبضـ‬ ٚ
2.7ِ‫برًاه‬ ‫بر‬ ‫هرٍری‬
ٝٔ‫ثط٘ب‬‫ٔی‬ ‫ضا‬ ٖ‫أىب‬ ٗ‫ای‬ ٖ‫وبضثطا‬ ٝ‫ث‬ ‫ؾبذت‬ ‫ذٛاٞیس‬ ُ‫فه‬ ٗ‫ای‬ ‫زض‬ ٝ‫و‬ ‫ای‬ْ‫پیب‬ ‫ٚضٚز‬ ‫ثب‬ ٝ‫و‬ ‫زٞس‬ٖ‫آ‬ ‫نٛضت‬ ٝ‫ث‬ ‫یىسیٍط‬ ‫ثب‬ ،ٜ‫ؾبز‬ ْ‫فط‬ ‫یه‬ ‫زض‬ ‫ٞب‬‫چت‬ ٗ‫الی‬
ُ‫قى‬ ‫زض‬ ٜ‫قس‬ ٜ‫زاز‬ ‫(ٕ٘بیف‬ ‫وٙٙس‬2.1،ْ‫پیب‬ ‫یه‬ .)‫قس‬ ‫ٚاضز‬ ٝ‫و‬ ‫ظٔب٘ی‬‫ٔی‬ ٜ‫فطؾتبز‬ ‫اتبق‬ ٖ‫ٕٞب‬ ‫زض‬ ‫زیٍط‬ ٖ‫وبثطا‬ ْ‫تٕب‬ ٝ‫ث‬ ،.‫قٛز‬
‫ٔی‬ ٜ‫زاز‬ ‫وبضثط‬ ٝ‫ث‬ ‫ذٛزوبض‬ ‫نٛضت‬ ٝ‫ث‬ ٖ‫ٟٕٔب‬ ْ‫٘ب‬ ‫یه‬ ،ٝٔ‫ثط٘ب‬ ‫قطٚع‬ ٖ‫ظٔب‬ ‫زض‬‫ٔی‬ ‫أب‬ ،‫قٛز‬ٖ‫آ‬ ‫تٛا٘ٙس‬‫زض‬ ٝ‫آ٘چ‬ ‫ثب‬ ‫(ُٔبثك‬ ‫زٞٙس‬ ‫تغییط‬ ‫زؾتٛض‬ ‫یه‬ ‫ٚضٚز‬ ‫ثب‬ ‫ضا‬
ُ‫قى‬2.2‫یه‬ ‫ثب‬ ‫چت‬ ‫زؾتٛضات‬ .)‫اؾت‬ ٜ‫قس‬ ٜ‫زاز‬ ‫ٕ٘بیف‬/‫ٔی‬ ‫آغبظ‬.‫قٛ٘س‬
11
‫ٔی‬ ‫وبضثط‬ ‫یه‬ ،ٝ‫ٔكبث‬ ‫ثُٛض‬‫تٛا٘س‬ٜ‫زاز‬ ‫(ٕ٘بیف‬ ،)‫قٛز‬ ‫ّٔحك‬ ٖ‫آ‬ ٝ‫ث‬ ‫زاضز‬ ‫ٚخٛز‬ ٝ‫و‬ ‫نٛضتی‬ ‫زض‬ ‫(یب‬ ‫وٙس‬ ‫ایدبز‬ ‫خسیس‬ ‫چت‬ ‫اتبق‬ ‫یه‬ ‫زؾتٛض‬ ‫یه‬ ‫ٚضٚز‬ ‫ثب‬
11
ُ‫قى‬ ‫زض‬ ٜ‫قس‬2.3ٝٔ‫ثط٘ب‬ ‫ثبالی‬ ‫افمی‬ ‫٘ٛاض‬ ‫زض‬ ‫خسیس‬ ‫اتبق‬ ْ‫٘ب‬ ،‫اتبق‬ ‫یه‬ ٝ‫ث‬ ٖ‫قس‬ ‫ّٔحك‬ ‫یب‬ ‫ایدبز‬ ْ‫ٍٞٙب‬ .)‫اتبق‬ ٗ‫ای‬ .‫قس‬ ‫ذٛاٞس‬ ٜ‫زاز‬ ‫ٕ٘بیف‬ ‫چت‬ ‫ی‬
ٝ‫ث‬ ٗ‫ٕٞچٙی‬‫فٟطؾت‬‫اتبق‬ٝ‫٘بحی‬ ‫ضاؾت‬ ‫ؾٕت‬ ‫زض‬ ‫زؾتطؼ‬ ‫زض‬ ‫ٞبی‬ْ‫پیغب‬ ‫ی‬‫ٔی‬ ٜ‫افعٚز‬ ‫چت‬ ‫ٞبی‬.‫قٛز‬
‫وبضثط‬ ٝ‫آ٘ى‬ ‫اظ‬ ‫پؽ‬‫ضا‬ ‫اتبلف‬‫خسیس‬ ‫اتبق‬ ‫یه‬ ٝ‫ث‬‫ٔی‬ ‫تغییط‬‫ٔی‬ ْ‫اػال‬ ‫ضا‬ ‫تغییط‬ ْ‫ا٘دب‬ ٓ‫ؾیؿت‬ ،‫زٞس‬ٖ‫(ٕٞب‬ ‫وٙس‬ُ‫قى‬ ‫زض‬ ٝ‫و‬ ‫َٛض‬2.4.)‫اؾت‬ ٜ‫قس‬ ٜ‫زاز‬ ‫ٕ٘بیف‬
ٗ‫زضػی‬‫زض‬ ً‫ا‬‫ػٕس‬ ٝٔ‫ثط٘ب‬ ٗ‫ای‬ ‫ػّٕىطز‬ ٝ‫و‬ َ‫حب‬،‫اؾت‬ ٝ‫پبی‬ ‫حس‬‫تىٙیه‬ ٚ ٟٓٔ ‫اخعاء‬ٝٔ‫ثط٘ب‬ ‫یه‬ ٗ‫ؾبذت‬ ‫ثطای‬ ٝ‫و‬ ‫اؾبؾی‬ ‫ٞبی‬ِ‫ة‬ٚ ‫ی‬‫ٞؿتٙس‬ ْ‫الظ‬ ً٘‫ثالزض‬
‫ٔی‬ ‫ٕ٘بیف‬ ٝ‫ث‬ ‫ضا‬.‫ٌصاضز‬
‫ٔی‬ ٖ‫٘كب‬ ٝٔ‫ثط٘ب‬ ٗ‫ای‬‫ٔی‬ ‫٘ٛز‬ ٍٝ٘ٛ‫چ‬ ٝ‫و‬ ‫زٞس‬ٜ‫زاز‬ ٖ‫ٕٞعٔب‬ ‫ثُٛض‬ ‫تٛا٘س‬‫ٞبی‬HTTPُِ‫فبی‬ ُ‫(ٔث‬ َٕٛ‫ٔؼ‬ٜ‫زاز‬ ٚ ،)‫ایؿتب‬ ‫ٞبی‬‫ضا‬ ً٘‫ثالزض‬ ‫ٞبی‬‫زٞس‬ ٝ‫اضائ‬1
.
‫ٔی‬ ٖ‫٘كب‬ ٗ‫ٕٞچٙی‬ٝٔ‫ثط٘ب‬ ٝ‫و‬ ‫زٞس‬ٍٝ٘ٛ‫چ‬ ‫٘ٛز‬ ‫ٞبی‬ٖ‫ؾبظٔب‬‫زٞی‬‫ٔی‬ٚ ‫قٛ٘س‬‫ٚاثؿتٍی‬‫ٞب‬‫ٔی‬ ‫ٔسیطیت‬ ٍٝ٘ٛ‫چ‬.‫قٛ٘س‬
‫فٙبٚضی‬ ٝ‫ث‬ ‫ٍ٘بٞی‬ ٖٛٙ‫او‬‫ٔی‬ ‫ٞبیی‬ٜ‫پیبز‬ ‫ثطای‬ ‫ثطای‬ ٝ‫و‬ ٓ‫ا٘ساظی‬.‫ٞؿتٙس‬ ‫٘یبظ‬ ‫ٔٛضز‬ ٝٔ‫ثط٘ب‬ ٗ‫ای‬ ‫ؾبظی‬
2.2‫ًیازهٌذی‬ُ‫آهاد‬ ٍ ِ‫برًاه‬ ‫ّای‬ِ‫اٍلی‬ ‫سازی‬
ٝٔ‫ثط٘ب‬‫چ‬ ‫ی‬‫ت‬‫ی‬:‫زٞس‬ ْ‫ا٘دب‬ ‫ضا‬ ‫وبضٞب‬ ٗ‫ای‬ ‫ثبیس‬ ‫ؾبذت‬ ‫ذٛاٞیس‬ ‫قٕب‬ ٝ‫و‬
ُ‫فبی‬ُ‫(ٔث‬ ‫ایؿتب‬ ‫ٞبی‬HTML،CSSٚ ،JavaScriptِ‫ضا‬ )‫وبضثط‬ ‫ؾٕت‬‫زٞس‬ ٝ‫اضائ‬
ٝ‫ث‬،ْ‫پیب‬ َ‫تجبز‬ ‫أط‬‫وٙس‬ ‫ضؾیسٌی‬ ‫ؾطٚض‬ ‫ضٚی‬
ٝ‫ث‬،ْ‫پیب‬ َ‫تجبز‬ ‫أط‬‫وٙس‬ ‫ضؾیسٌی‬ ‫وبضثط‬ ‫ٔطٚضٌط‬ ‫زض‬
‫ثطای‬ٝ‫اضائ‬ُ‫فبی‬ ‫ی‬َٚ‫ٔبغ‬ ‫اظ‬ ،‫ایؿتب‬ ‫ٞبی‬httpِ‫٘ٛز‬ ‫ذٛز‬ ‫زض‬ ٜ‫قس‬ ٝ‫تؼجی‬ٝ‫اضائ‬ ٖ‫ظٔب‬ ‫زض‬ ‫أب‬ .‫وطز‬ ‫ذٛاٞیس‬ ٜ‫اؾتفبز‬ُ‫فبی‬ ‫ی‬‫َطیك‬ ‫اظ‬ ‫ٞب‬HTTP‫وبفی‬ ‫ٔؼٕٛال‬ ،
ٓٞ ‫ضا‬ ُ‫فبی‬ ‫٘ٛع‬ ٗ‫ٕٞچٙی‬ ‫ثبیس‬ ‫قٕب‬ ‫قٛز؛‬ َ‫اضؾب‬ ُ‫فبی‬ ‫ٔحتٛای‬ ٍ‫فم‬ ٝ‫و‬ ‫٘یؿت‬‫زضج‬‫و‬ٗ‫ای‬ .‫ٙیس‬‫ٔمساض‬ ‫ثب‬ ‫وبض‬‫زٞی‬ُِ‫ؾطفه‬HTTPِ2
Content-Type‫ثب‬ِ‫ع‬ٛ٘MIME3
‫ٔی‬ ْ‫ا٘دب‬ ‫ٔٙبؾت‬‫ا٘ٛاع‬ ٗ‫ای‬ ٗ‫یبفت‬ ‫ثطای‬ .‫قٛز‬MIMEَٚ‫ٔبغ‬ ‫یه‬ ‫اظ‬ ،‫قرم‬‫ثبِث‬ْ‫٘ب‬ ‫ثب‬mime‫ذٛاٞیس‬ ٜ‫اؾتفبز‬
.‫وطز‬
1
serve
2
HTTP header
3
MIME type
43
‫فصل‬3
ِ‫برًاه‬ ‫هباًی‬‫ًَد‬ ‫با‬ ‫ًَیسی‬
‫هی‬ ‫پَضص‬ ‫فصل‬ ‫ایي‬ ِ‫ک‬ ‫هطالبی‬‫دّذ‬
ٖ‫ؾبظٔب‬َٚ‫ٔبغ‬ ‫لبِت‬ ‫زض‬ ٖ‫وستب‬ ‫زٞی‬‫ٞب‬
‫وس‬ ٗ‫٘ٛقت‬ ٝ‫ث‬ ٌٛ‫ٔطث‬ ‫لطاضزازٞبی‬
‫ضذساز‬ ٝ‫ث‬ ‫ضؾیسٌی‬‫ٞبی‬‫ته‬ٝ‫ٔطتج‬‫ای‬َ‫وب‬ ‫ثب‬‫ثه‬‫ٞب‬
‫ضذساز‬ ٝ‫ث‬ ‫ضؾیسٌی‬‫تىطاض‬ ‫ٞبی‬‫ثب‬ ٜ‫قٛ٘س‬ٜ‫نبزضوٙٙس‬‫ضذساز‬ ‫ٞبی‬
ٜ‫پیبز‬َ‫وٙتط‬ ‫ٔٛاظی‬ ٚ َ‫ؾطیب‬ ‫ؾبظی‬ٝٔ‫ثط٘ب‬ ‫اخطای‬ ٖ‫خطیب‬
ٜ‫ثٟط‬ٝٔ‫ثط٘ب‬ ‫اخطای‬ ٖ‫خطیب‬ َ‫وٙتط‬ ‫اثعاضٞبی‬ ‫اظ‬ ‫ٌیطی‬
‫٘ٛز‬ْ‫پّتفط‬ ‫اظ‬ ‫ثؿیبضی‬ ‫ثطذالف‬ ،ٗ‫ٔت‬ ‫ٞبی‬‫ثبظ‬1
ٜ‫آٔبز‬ ،ٝ‫حبفظ‬ ٝ‫ث‬ ٚ ‫اؾت‬ ‫ضاحت‬ ‫ثؿیبض‬ ‫ؾبظیف‬‫ٞیچ‬ ٝ‫ث‬ .‫٘ساضز‬ ‫٘یبظ‬ ‫ظیبزی‬ ‫زیؿه‬ ‫فًبی‬ ٚ‫ثیّس‬ ِٓ‫ؾیؿت‬2
‫یب‬
ٍِ‫ٔحی‬-ِ‫غ‬ٕ‫ٔدت‬-ٝ‫تٛؾؼ‬‫ی‬3
ٜ‫پیچیس‬‫ای‬‫أب‬ ‫ٔجٙبیی‬ ‫اَالػبت‬ ‫ٔمساضی‬ .‫٘یؿت‬ ‫٘یبظ‬ٝ‫ث‬ ،ُ‫فه‬ ٗ‫ای‬ ‫زض‬ .‫وطز‬ ‫ذٛاٞس‬ ‫وٕه‬ ‫ثؿیبض‬ ‫قطٚع‬ ٖ‫ظٔب‬ ‫زض‬ ‫قٕب‬ ٝ‫ث‬ َ‫ٞطحب‬
ٝ‫تٛؾؼ‬ ٝ‫و‬ ‫چبِف‬ ٚ‫ز‬ ٝ‫ث‬ٖ‫زٞٙسٌب‬ٜ‫تبظ‬ٖ‫آ‬ ‫ثب‬ ‫٘ٛز‬ ‫ی‬‫ٔی‬ ‫قس‬ ‫ذٛاٞٙس‬ ٝ‫ٔٛاخ‬ ‫ٞب‬:ٓ‫پطزاظی‬
‫وٙیس‬ ‫ؾبظٔب٘سٞی‬ ‫ضا‬ ٖ‫وستب‬ ٍٝ٘ٛ‫چ‬
ٝٔ‫ثط٘ب‬‫چ‬ ٖٚ‫آؾٙىط‬ ‫٘ٛیؿی‬‫ُٛض‬‫ٔی‬ ‫وبض‬‫وٙس‬
ٖ‫ؾبظٔب‬ ‫چٍٍٛ٘ی‬ ُ‫ٔكى‬ٝٔ‫ثط٘ب‬ ‫ثیكتط‬ ‫ثطای‬ ‫وس‬ ‫زٞی‬.‫آقٙبؾت‬ ٝ‫تدطث‬ ‫ثب‬ ٖ‫٘ٛیؿب‬‫ُٔٙك‬‫والؼ‬ ‫لبِت‬ ‫زض‬ٖ‫ؾبظٔب‬ ‫تٛاثغ‬ ٚ ‫ٞب‬‫ٔی‬ ‫زٞی‬.‫قٛز‬
ُ‫فبی‬‫والؼ‬ ُٔ‫قب‬ ‫ٞبی‬‫تٛاثغ‬ ٚ ‫ٞب‬‫زض‬‫زایطوتٛضی‬‫ٞبیی‬ُ‫زاذ‬ ‫زض‬‫ٔٙجغ‬ ‫زضذت‬4
ٖ‫ؾبظٔب‬‫ٔی‬ ‫زٞی‬.‫قٛ٘س‬ٝٔ‫ثط٘ب‬ ‫لبِت‬ ‫زض‬ ‫وس‬ ،ٖ‫پبیب‬ ‫زض‬‫وتبة‬ ٚ ‫ٞب‬ٝ٘‫ذب‬‫ٞب‬
ٖ‫ؾبظٔب‬‫ٔی‬ ‫زٞی‬.‫قٛز‬‫لسضت‬ ْ‫ٔىب٘یع‬ ‫٘ٛز‬ ‫زض‬ َٚ‫ٔبغ‬ ٓ‫ؾیؿت‬ٖ‫ؾبظٔب‬ ‫ثطای‬ ‫ضا‬ ‫ٔٙسی‬‫ٔی‬ ٓٞ‫فطا‬ ‫وس‬ ‫زٞی‬ُ‫فه‬ ٗ‫ای‬ ‫زض‬ ‫قٕب‬ ٚ ،‫وٙس‬‫چٍٍٛ٘ی‬ ‫ثب‬ ُٝ‫ضاث‬ ‫زض‬
ٜ‫ثٟط‬ٖ‫آ‬ ‫اظ‬ ٗ‫ٌطفت‬.‫آٔٛذت‬ ‫ذٛاٞیس‬
ٝٔ‫ثط٘ب‬ ‫ثط‬ ٖ‫قس‬ ٍّ‫ٔؿ‬ ٚ ‫زضن‬ٖٚ‫آؾٙىط‬ ‫٘ٛیؿی‬‫ٔی‬‫تٛا٘س‬ٖ‫ظٔب‬ ‫ٔمساضی‬‫ثط‬‫ثبقس؛‬ٝ‫خبث‬ ‫یه‬ ٝ‫ث‬ ‫٘یبظ‬ ٚ‫زض‬ ‫خبیی‬‫َطظ‬‫تفىط‬ٗ‫ای‬ ٝ‫ث‬ٝٔ‫ثط٘ب‬ ‫ُٔٙك‬ ٝ‫و‬ٝ‫چ‬ ٝ‫ث‬
‫نٛضت‬‫قٛز‬ ‫اخطا‬ ‫ثبیس‬‫زاضز‬.ٝٔ‫ثط٘ب‬ ‫زض‬‫ٔی‬ ‫قٕب‬ ،ٖٚ‫ؾٙىط‬ ‫٘ٛیؿی‬‫ض‬ ‫وس‬ ٍ‫ذ‬ ‫یه‬ ‫تٛا٘یس‬ٖ‫آ‬ ‫اظ‬ ُ‫لج‬ ٝ‫و‬ ‫ذَُٛی‬ ْ‫تٕب‬ ٝ‫و‬ ‫ثٙٛیؿیس‬ ّٝ‫ٔؿئ‬ ٗ‫ای‬ ٝ‫ث‬ ّٓ‫ػ‬ ‫ثب‬ ‫ضا‬ ‫ا‬
ٜ‫آٔس‬ٜ‫قس‬ ‫اخطا‬ ٝ‫ِحظ‬ ٖ‫آ‬ ‫تب‬ ‫ا٘س‬ٝٔ‫ثط٘ب‬ ‫زض‬ .‫ا٘س‬‫ٔی‬ ٝٔ‫ثط٘ب‬ ‫ُٔٙك‬ ،‫أب‬ ٖٚ‫آؾٙىط‬ ‫٘ٛیؿی‬‫ٔبقیٙی‬ ٝ‫ث‬ ٝ‫قجی‬ ‫اثتسا‬ ‫زض‬ ‫تٛا٘س‬‫ثیبیس‬ ‫٘ظط‬ ٝ‫ث‬ٜ‫پیچیس‬ ‫ضٚقی‬ ٚ ‫اثعاض‬ ‫ثب‬ ٝ‫و‬
‫ٔی‬ ْ‫ا٘دب‬ ‫ضا‬ ٜ‫ؾبز‬ ‫وبض‬ ‫یه‬‫زٞس‬‫ضا‬ ٜ‫قس‬ ‫نطف‬ ٖ‫ظٔب‬ ‫اضظـ‬ .ٝ‫تٛؾؼ‬ ٝ‫ث‬ ‫قطٚع‬ ‫اظ‬ ُ‫لج‬ ٝ‫و‬ ‫زاضز‬ٜ‫پطٚغ‬ ‫یه‬ ‫ی‬،‫ثعضي‬ ‫ی‬ٝٔ‫ثط٘ب‬ ‫ضفتبض‬ ٍٝ٘ٛ‫چ‬ ٝ‫و‬ ‫ثیبٔٛظیس‬ٖ‫تب‬
‫ضا‬ٝ‫ث‬‫ُّٔٛة‬ ٛ‫٘ح‬.‫وٙیس‬ َ‫وٙتط‬
‫تىٙیه‬ ‫اظ‬ ‫تؼسازی‬ ،ُ‫فه‬ ٗ‫ای‬ ‫زض‬‫ٞبی‬ٝٔ‫ثط٘ب‬ ٟٓٔٞ‫ذٛا‬ ‫ضا‬ ٖٚ‫آؾٙىط‬ ‫٘ٛیؿی‬‫ی‬‫ٔی‬ ‫ضا‬ ٖ‫أىب‬ ٗ‫ای‬ ‫قٕب‬ ٝ‫ث‬ ٝ‫و‬ ‫آٔٛذت‬ ‫س‬‫تب‬ ‫زٞٙس‬‫زلیك‬ َ‫وٙتط‬ٜٛ‫٘ح‬‫اخطای‬ ‫ی‬
ٝٔ‫ثط٘ب‬‫ضا‬ ٖ‫تب‬‫زٞیس‬ ْ‫ا٘دب‬.ٝ‫و‬ ‫آٔٛذت‬ ‫ذٛاٞیس‬
1
open source
2
build system
3
integrated development environment (IDE)
4
source tree
44
‫ضذساز‬ ٝ‫ث‬ ٍٝ٘ٛ‫چ‬‫ٞبی‬‫ته‬ٝ‫ٔطتج‬‫ای‬‫زٞیس‬ ‫پبؾد‬
‫ضذساز‬ ٝ‫ث‬ ٍٝ٘ٛ‫چ‬‫ٔی‬ ‫تىطاض‬ ٝ‫و‬ ‫ٞبیی‬‫وٙیس‬ ‫ضؾیسٌی‬ ‫قٛ٘س‬
‫ثیبٚضیس‬ ‫زض‬ ‫ٔتٛاِی‬ ‫نٛضت‬ ٝ‫ث‬ ‫ضا‬ ٖٚ‫آؾٙىط‬ ‫ُٔٙك‬ ٍٝ٘ٛ‫چ‬
‫ٔی‬ ‫قطٚع‬ ّٝ‫ٔؿئ‬ ٗ‫ای‬ ‫ثب‬ ‫أب‬‫ٔی‬ ٍٝ٘ٛ‫چ‬ ٝ‫و‬ ٓ‫وٙی‬ٜ‫ػٟس‬ ‫اظ‬ ‫تٛا٘یس‬ّٝ‫ٔؿئ‬ ‫ی‬‫ؾ‬ ‫ی‬ٖ‫بظٔب‬‫اظ‬ ٜ‫اؾتفبز‬ ‫َطیك‬ ‫اظ‬ ‫وس‬ ‫زٞی‬َٚ‫ٔبغ‬‫ٞب‬‫وس‬ ‫ٍٟ٘ساضی‬ ‫ثطای‬ ‫٘ٛز‬ ‫(ضٚـ‬
ٝ‫ث‬ٖ‫ؾبظٔب‬ ‫نٛضت‬‫زٞی‬ٚ ٜ‫قس‬ٝ‫ثؿت‬‫ثٙسی‬‫قس‬ٜ‫اؾتفبز‬ ‫ثطای‬ ٜ)ٖ‫آؾب‬ ‫ٔدسز‬ ‫ی‬‫ثطآییس‬.
3.7‫سازهاى‬ُ‫استفاد‬ ٍ ‫دّی‬‫ًَد‬ ‫در‬ ‫عولکرد‬ ‫از‬ ‫هجذد‬ ‫ی‬
ُٝ‫٘م‬ ٝ‫ث‬ ‫اغّت‬ ،ٖ‫آ‬ ‫غیط‬ ٝ‫چ‬ ‫٘ٛز‬ ٝ‫چ‬ ،ٝٔ‫ثط٘ب‬ ‫یه‬ ٗ‫ؾبذت‬ ٖ‫ظٔب‬ ‫زض‬‫ٔی‬ ‫ای‬‫ضؾیس‬‫ضا‬ َ‫وٙتط‬ ٚ ‫ٔسیطیت‬ ،‫ٚاحس‬ ُ‫فبی‬ ‫یه‬ ‫زض‬ ‫وس‬ ْ‫تٕب‬ ٖ‫زاز‬ ‫لطاض‬ ‫زیٍط‬ ٝ‫و‬
‫ٔی‬ ‫زقٛاض‬.‫وٙس‬‫ٔی‬ ‫ضخ‬ ّٝ‫ٔؿئ‬ ٗ‫ای‬ ٝ‫و‬ ‫ظٔب٘ی‬ٖ‫ٕٞب‬ ،ْٛ‫ٔطؾ‬ ‫ضٞیبفت‬ ،‫زٞس‬ٝ‫ث‬ ٝ‫و‬ ‫َٛض‬ُ‫قى‬ ‫زض‬ ‫تهٛیطی‬ ‫نٛضت‬3.1ٝ‫و‬ ‫اؾت‬ ٗ‫ای‬ ،‫اؾت‬ ٜ‫قس‬ ٜ‫زاز‬ ٖ‫٘كب‬
‫ضا‬ ‫وس‬ ‫ظیبزی‬ ‫ٔمساض‬ ‫حبٚی‬ ُ‫فبی‬ ‫یه‬ٓ‫ثطزاضی‬ٖ‫ؾبظٔب‬ ٝ‫ث‬ ْ‫السا‬ ٚ‫َط‬ ‫اظ‬ ٖ‫آ‬ ‫زٞی‬ٜٚ‫ٌط‬ ‫یك‬‫ثرف‬ ‫ثٙسی‬‫ُٔٙك‬ ‫زض‬ ٍ‫ٔطتج‬ ‫ٞبی‬،ٖ‫آ‬ َ‫ا٘تمب‬ ٚ‫ٞب‬ُ‫فبی‬ ٝ‫ث‬‫ٞبی‬
.ٓ‫وٙی‬ ٝ٘‫خساٌب‬ٖ‫ظثب‬ ‫ثطذی‬ ‫زض‬ُ‫ٔث‬ ،‫ٞب‬PHPٚRuby،ٖ‫آ‬ ٝ‫(ث‬ ‫زیٍط‬ ُ‫فبی‬ ‫یه‬ ‫اظ‬ ‫ُٔٙك‬ ٖ‫وطز‬ ‫ٚاضز‬،ُِ‫فبی‬"ٜ‫ٌٙدب٘س‬ٜ‫قس‬"1
)‫ٌفت‬ ٓ‫ذٛاٞی‬‫ٔی‬‫تٛا٘س‬
ٗ‫ای‬‫اخطا‬ ِ‫ك‬ُٙٔ ْ‫تٕب‬ ٝ‫و‬ ‫ثسٞس‬ ‫ضا‬ ‫ٔؼٙب‬ُِ‫فبی‬ ‫زض‬ ٜ‫قس‬،ٜ‫قس‬ ٜ‫ٌٙدب٘س‬ِٚ‫لّٕط‬‫ؾطاؾطی‬2
‫ضا‬‫ٔی‬ ‫لطاض‬ ‫تبثیط‬ ‫تحت‬‫زٞس‬.
‫ٔؼطفی‬ ‫تبثغ‬ ‫ٞط‬ ٚ ٜ‫قس‬ ٝ‫ؾبذت‬ ‫ٔتغیط‬ ‫ٞط‬ ٝ‫و‬ ‫اؾت‬ ‫ٔؼٙی‬ ٗ‫ثسی‬ ٗ‫ای‬ٜ‫قس‬3
‫ذُط‬ ،ٜ‫قس‬ ٜ‫ٌٙدب٘س‬ ُ‫فبی‬ ‫زض‬‫ضٚ٘ٛیؿی‬4
ٖ‫آ‬ ‫ضٚی‬ٜ‫قس‬ ٝ‫ؾبذت‬ ٝٔ‫ثط٘ب‬ ‫زض‬ ٝ‫و‬ ‫ٞبیی‬
ٜ‫قس‬ ‫ٔؼطفی‬ ٚ.‫زاضز‬ ‫پی‬ ‫زض‬ ‫ضا‬ ‫ا٘س‬
‫ثب‬ ٝٔ‫ثط٘ب‬ ٗ‫٘ٛقت‬ َ‫حب‬ ‫زض‬ ‫وٙیس‬ ‫فطو‬ ‫ٔثال‬PHPٝٔ‫ثط٘ب‬ ‫ثبقیس؛‬:‫ثبقس‬ ‫ظیط‬ ‫ُٔٙك‬ ُٔ‫قب‬ ‫اؾت‬ ٗ‫ٕٔى‬ ‫قٕب‬ ‫ی‬
1
included
2
global scope
3
declared
4
overwriting
41
3.7.2ٌِ‫بْی‬‫سازی‬‫از‬ ُ‫استفاد‬ ‫با‬ ‫هاشٍل‬ ‫ساخت‬module.exports
‫ٞطچٙس‬‫ٔمساضزٞی‬‫قیء‬exports‫ٔتغیط‬ ٚ ‫تٛاثغ‬ ‫ثب‬‫اؾت‬ ‫ٔٙبؾت‬ َٚ‫ٔبغ‬ ‫ؾبذت‬ ‫٘یبظٞبی‬ ‫ثیكتط‬ ‫ثطای‬ ‫ٞب‬ٖ‫ظٔب‬ ،‫تب‬ ‫ثرٛاٞیس‬ ٝ‫و‬ ‫آٔس‬ ‫ذٛاٞس‬ ‫پیف‬ ‫ٞبیی‬
.‫وٙس‬ َٚ‫ػس‬ َ‫ٔس‬ ٗ‫ای‬ ‫اظ‬ َٚ‫ٔبغ‬ ‫یه‬
ٝ‫ث‬ُ‫تجسی‬ َٚ‫ٔبغ‬ ،َ‫ٔثب‬ ٖ‫ػٙٛا‬ٜ‫وٙٙس‬ُ‫لج‬ ٝ‫و‬ َٛ‫پ‬ ‫ٚاحس‬ ‫ی‬‫ٔی‬ ،‫قس‬ ٝ‫ؾبذت‬ ‫ثرف‬ ٗ‫ای‬ ‫زض‬ ‫تط‬ُ‫قى‬ ٗ‫ای‬ ٝ‫ث‬ ‫تٛا٘س‬ٜ‫زٚثبض‬ٝ‫٘ٛقت‬ٝ‫ث‬ ٝ‫و‬ ‫قٛز‬‫خبی‬ٖ‫ثطٌطزا٘س‬‫یه‬
‫اؾت‬ ‫تٛاثؼی‬ ‫حبٚی‬ ٝ‫و‬ ‫قیء‬،‫یه‬‫ػسز‬‫تبثغ‬ٜ‫ؾبظ٘س‬‫ی‬1
Currencyٜ‫پیبز‬ ‫یه‬ .‫ثطٌطزا٘س‬ ‫ضا‬‫قیءٌطا‬ ‫ؾبظی‬‫ٔی‬:‫ثبقس‬ ٗ‫ای‬ ٝ‫ث‬ ٝ‫قجی‬ ‫چیعی‬ ‫تٛا٘س‬
‫اظ‬ ‫تبثغ‬ ‫یه‬ ‫ثبظٌكت‬requireٝ‫ث‬‫خبی‬‫ثبظٌكت‬‫قیء‬ ‫یه‬ٖ‫آ‬ ‫اظ‬‫ٔی‬ َٚ‫ٔبغ‬ ‫اظ‬ ٝ‫و‬ ‫اؾت‬ ‫چیعی‬ ‫تٟٙب‬ ٗ‫ای‬ ٝ‫و‬ ‫نٛضتی‬ ‫زض‬ ،‫ضا‬ ‫قٕب‬ ‫وس‬ ،‫ذٛاٞیس‬
‫ذٛـ‬‫ؾبذت‬‫تط‬‫ٔی‬.‫وٙس‬
‫ٔی‬ ‫ثط‬ ‫تبثغ‬ ‫یب‬ ‫ٔتغیط‬ ‫ػسز‬ ‫یه‬ ٝ‫و‬ َٚ‫ٔبغ‬ ‫یه‬ ٗ‫ؾبذت‬ ‫ثطای‬ٝ‫و‬ ‫ثع٘یس‬ ‫حسؼ‬ ‫اؾت‬ ٗ‫ٕٔى‬ ،‫ٌطزا٘س‬‫ثبیس‬exports‫ضا‬ٝ‫ث‬‫ؾبزٌی‬‫ٔی‬ ٝ‫و‬ ‫چیعی‬ ‫ٞط‬ ‫ثب‬‫ذٛاٞیس‬
ٝ‫و‬ ‫زاضز‬ ‫تٛلغ‬ ‫٘ٛز‬ ٖٛ‫چ‬ ،‫وطز‬ ‫٘رٛاٞس‬ ‫وبض‬ ٗ‫ای‬ ‫أب‬ .‫وٙیس‬ ‫ٔمساضزٞی‬ ‫قٛز‬ ٜ‫ثطٌطزا٘س‬exportsً‫ا‬‫ٔدسز‬‫ثب‬‫ٞیچ‬‫قیء‬‫ٔتغیط‬ ‫یب‬ ،‫تبثغ‬ ،‫ٔمساض‬ ‫زیٍطی‬‫زٞی‬
.‫٘كٛز‬‫زض‬ ‫ٔٛخٛز‬ َٚ‫ٔبغ‬ ‫وس‬‫ٕ٘بی‬‫ٔمساض‬ ٝ‫ث‬ ْ‫السا‬ ‫ثؼسی‬‫زٞی‬exports‫ٔی‬ ‫تبثغ‬ ‫یه‬ ‫ثب‬.‫وٙس‬
ٗ‫ای‬ ‫ثطای‬ٖ‫ٕٞب‬ ُ‫لج‬ َٚ‫ٔبغ‬ ‫تب‬ ٓ‫وٙی‬ ‫وبضی‬ ٝ‫و‬ٝ‫و‬ ‫زاضیس‬ ‫٘یبظ‬ ،‫وٙس‬ ‫وبض‬ ‫اؾت‬ ‫ا٘تظبض‬ ‫ٔٛضز‬ ٝ‫و‬ ‫َٛض‬exports‫ثب‬ ‫ضا‬module.exports.‫وٙیس‬ ٗ‫خبیٍعی‬
ْ‫ٔىب٘یع‬module.exports‫ٔی‬ ‫ضا‬ ٖ‫أىب‬ ٗ‫ای‬ ‫قٕب‬ ٝ‫ث‬‫ضا‬ ‫قیء‬ ‫یب‬ ،‫تبثغ‬ ،‫ٔتغیط‬ ‫ته‬ ‫یه‬ ‫تب‬ ‫زٞس‬‫نبزض‬2
.‫وٙیس‬ٓٞ ٝ‫و‬ ‫ثؿبظیس‬ ‫ٔبغِٚی‬ ‫اٌط‬exportsٚ
ٓٞmodule.exports،‫ثبقس‬ ٜ‫وطز‬ ‫ٔمساضزٞی‬ ‫ضا‬module.exports‫ٔی‬ ٜ‫ثبظٌطزا٘س‬ٚ ‫قٛز‬exports‫ٔی‬ ٝ‫ٌطفت‬ ٜ‫٘بزیس‬.‫قٛز‬
‫هی‬ ‫صادر‬ ً‫ا‬‫حقیقت‬ ‫چیس‬ ِ‫چ‬‫ضَد‬
ٖ‫آ‬ٝٔ‫ثط٘ب‬ ٝ‫ث‬ ً‫ب‬‫ٟ٘بیت‬ ٝ‫و‬ ٝ‫چ‬‫ٔی‬ ‫نبزض‬ ‫قٕب‬ ‫ی‬‫قٛز‬module.exports.‫اؾت‬exportsٝ‫ث‬ِ‫ع‬‫اضخب‬ ‫یه‬ ‫ؾبزٌی‬3
ٝ‫ث‬ ‫ؾطاؾطی‬
1
constructor function
2
export
3
reference
55
module.exportsٝ‫ث‬ ‫آغبظ‬ ‫زض‬ ٝ‫و‬ ،‫اؾت‬‫ٔی‬ ٝ‫و‬ ‫ذبِی‬ ‫قیء‬ ‫یه‬ ‫نٛضت‬ٗ‫ثٙبثطای‬ .‫اؾت‬ ٜ‫قس‬ ‫تؼطیف‬ ‫ثیفعاییس‬ ‫ذهٛنیبت‬ ٖ‫آ‬ ٝ‫ث‬ ‫تٛا٘یس‬
ِ‫ت‬‫ػجبض‬ ً‫ال‬‫ٔث‬exports.myFuncٜ‫وٛتب‬ ٗ‫خبیٍعی‬ ‫یه‬ ‫تٟٙب‬‫ثطای‬ ‫تط‬module.exports.myFunc.‫اؾت‬
‫اٌط‬ ً‫ب‬‫٘تیدت‬‫ٔمساض‬exportsٝ‫ث‬ ٝ‫و‬ ٓ‫وٙی‬ ‫ػٛو‬ ‫ضا‬‫اضخبع‬ ‫زیٍطی‬ ‫چیع‬‫وٙس‬ٗ‫ثی‬ ‫اضخبع‬ ،module.exportsٚexports‫ٔی‬ ‫لُغ‬ٚ .‫قٛز‬
ٖٛ‫چ‬module.exports‫ٔی‬ ‫نبزض‬ ً‫ب‬‫حمیمت‬ ٝ‫و‬ ‫اؾت‬ ‫چیعی‬،‫قٛز‬exportsٖ‫آ‬ ‫زیٍط‬‫وطز‬ ‫٘رٛاٞس‬ ‫وبض‬ ‫اؾت‬ ‫ا٘تظبض‬ ‫ٔٛضز‬ ٝ‫و‬ ‫َٛض‬—‫زیٍط‬
ٝ‫ث‬module.exports‫ٕ٘ی‬ ‫اضخبع‬،‫وٙس‬ ‫پیسا‬ ٝٔ‫ازا‬ َ‫اتهب‬ ٗ‫ای‬ ٝ‫و‬ ‫ثرٛاٞیس‬ ‫اٌط‬ .‫وٙس‬‫ٔی‬ٝ‫و‬ ‫وٙیس‬ ‫وبضی‬ ‫تٛا٘یس‬module.exportsٜ‫زٚثبض‬
ٝ‫ث‬exports:ُ‫قى‬ ٗ‫ای‬ ٝ‫ث‬ ،‫وٙس‬ ‫اضخبع‬
‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬exports‫یب‬module.exports‫ٔی‬ ،‫زاضیس‬ ٝ‫و‬ ‫٘یبظی‬ ٝ‫ث‬ ٝ‫ثؿت‬ ،َٚ‫ٔبغ‬ ‫لبِت‬ ‫زض‬ ‫ضا‬ ‫ػّٕىطزٞب‬ ‫تٛا٘یس‬ٖ‫ؾبظٔب‬ ‫ٞب‬‫اظ‬ ٚ ‫وٙیس‬ ‫زٞی‬‫ٌطفتبض‬
ٖ‫قس‬ْ‫زا‬ ‫زض‬‫اؾىطیپت‬‫ٞبی‬ٝ‫ٕٞیك‬‫ضقس‬ َ‫حب‬ ‫زض‬.‫وٙیس‬ ‫اختٙبة‬
3.7.3ُ‫استفاد‬‫هاشٍل‬ ‫از‬ ‫هجذد‬ ‫ی‬ِ‫پَض‬ ‫از‬ ُ‫استفاد‬ ‫با‬ ‫ّا‬‫ی‬node_modules
ْ‫اِعا‬َٚ‫ٔبغ‬ٖ‫ٔىب‬ ‫زض‬ ٗ‫زاقت‬ ‫لطاض‬ ٝ‫ث‬ ‫ٞب‬ٖ‫ؾبظٔب‬ ‫ثطای‬ ،ٝٔ‫ثط٘ب‬ ٝ‫ث‬ ‫٘ؿجت‬ ‫٘ؿجی‬ ‫ٞبی‬ِ‫س‬‫و‬ ‫زٞی‬ٝٔ‫ثط٘ب‬ ٝ‫ث‬ ‫ٔرتم‬‫ا‬‫ذبل‬ ‫ی‬‫ٔفیس‬ٝ‫و‬ ‫وسی‬ ‫ثطای‬ ‫أب‬ ،‫اؾت‬
ٖ‫آ‬ ‫ثرٛاٞیس‬ٝٔ‫ثط٘ب‬ ‫زض‬ ً‫ا‬‫ٔدسز‬ ‫ضا‬‫اؾت‬ ‫ٔرتّف‬ ‫ٞبی‬‫ثٍصاضیس‬ ‫اقتطان‬ ٝ‫ث‬ ٖ‫زیٍطا‬ ‫ثب‬ ‫یب‬ ‫وٙیس‬ ٜ‫فبز‬‫٘ساضز‬ ‫ضا‬ ٜ‫فبیس‬ ٖ‫ٕٞب‬.‫فطز‬ ٝ‫ث‬ ‫ٔٙحهط‬ ْ‫ٔىب٘یع‬ ‫یه‬ ‫زاضای‬ ‫٘ٛز‬
‫ثطای‬ٜ‫اؾتفبز‬ٜ‫اخبظ‬ ٝ‫و‬ ‫اؾت‬ ‫وس‬ ‫اظ‬ ‫ٔدسز‬ ‫ی‬‫ی‬‫ٔی‬ ُ‫فبی‬ ٓ‫ؾیؿت‬ ‫زض‬ ٖ‫آ‬ ٖ‫ٔىب‬ ٗ‫زا٘ؿت‬ ٖٚ‫ثس‬ ‫ضا‬ َٚ‫ٔبغ‬ ‫یه‬ ْ‫اِعا‬‫زایطوتٛضی‬ ‫اظ‬ ٜ‫اؾتفبز‬ ْ‫ٔىب٘یع‬ ٗ‫ای‬ .‫زٞس‬
node_modules.‫اؾت‬
51
،ُ‫لج‬ َ‫ٔثب‬ ‫زض‬./currency‫اٌط‬ .‫وطزیس‬ ْ‫اِعا‬ ‫ضا‬./ٍ‫فم‬ ٚ ‫وٙیس‬ ‫حصف‬ ‫ضا‬currencyَٚ‫ٔبغ‬ ٗ‫ای‬ ‫خؿتدٛی‬ ‫ثطای‬ ٜ‫لبػس‬ ‫تؼسازی‬ ‫اظ‬ ‫٘ٛز‬ ،‫وٙیس‬ ْ‫اِعا‬ ‫ضا‬
‫ٔی‬ ‫پیطٚی‬ٖ‫(ٕٞب‬ ‫وٙس‬ُ‫قى‬ ‫زض‬ ٝ‫و‬ ‫َٛض‬3.5.)‫اؾت‬ ٜ‫قس‬ ‫ٔكرم‬
ِ‫ی‬ُ‫ٔحی‬ ِ‫ط‬‫ٔتغی‬1
NODE_PATHٖ‫ٔىب‬ ٖ‫وطز‬ ‫ٔكرم‬ ‫ثطای‬ ‫ضا‬ ‫ضٚقی‬َٚ‫ٔبغ‬ ‫ثطای‬ ٗ‫ٕٔى‬ ‫ٞبی‬‫ٔی‬ ٓٞ‫فطا‬ ‫٘ٛز‬ ‫ٞبی‬،ٜ‫اؾتفبز‬ ‫نٛضت‬ ‫زض‬ .‫وٙس‬
NODE_PATH‫زایطوتٛضی‬ ‫اظ‬ ‫ِیؿتی‬ ‫ثب‬ ‫ثبیس‬‫ٔمساض‬ ‫ٞب‬‫ٚیٙسٚظ‬ ‫زض‬ ٝ‫و‬ ‫قٛز‬ ‫زٞی‬‫ِٕی‬‫ؾ‬ ‫ثب‬ُِ‫وب‬ٚ ٗٝ‫ثمی‬ ‫زض‬ٓ‫ؾیؿت‬ ‫ی‬ُٔ‫ػب‬ُِٗ‫وب‬ ‫ثب‬ ‫ٞب‬‫خسا‬ ٓٞ ‫اظ‬
‫ٔی‬.‫قٛ٘س‬
1
environmental variable
11
‫بخص‬2
ِ‫تَسع‬ِ‫برًاه‬ ‫ی‬‫ًَد‬ ‫با‬ ‫ٍب‬ ‫ّای‬
‫ػّٕىطز‬ ٗ‫زاقت‬HTTPٝ‫ث‬ٝ‫تؼجی‬ ‫نٛضت‬‫٘ٛز‬ ‫ذٛز‬ ‫زض‬ ٜ‫قس‬‫تٙبؾت‬ ‫ٚخٛز‬ ‫ثبػث‬ ،‫شاتی‬ٝ‫تٛؾؼ‬ ‫ثطای‬ ‫٘ٛز‬ ‫زض‬ٝٔ‫ثط٘ب‬ ‫ی‬‫ٚة‬ ‫ٞبی‬‫ٔی‬ٝ‫تٛؾؼ‬ ‫اظ‬ ‫٘ٛع‬ ٗ‫ای‬ .‫قٛز‬
ٗ‫پطَطفساضتطی‬‫اؾت‬ ‫٘ٛز‬ ‫اظ‬ ٜ‫اؾتفبز‬.
ٗ‫ای‬ ‫زض‬‫ثرف‬‫ػّٕىطز‬ ‫اظ‬ ٍٝ٘ٛ‫چ‬ ٝ‫و‬ ‫آٔٛذت‬ ‫ذٛاٞیس‬HTTPِ‫تؼجی‬ٖٝ‫آ‬ ‫اظ‬ ‫پؽ‬ ٚ ،‫وٙیس‬ ٜ‫اؾتفبز‬ ‫٘ٛز‬ ٖٚ‫زض‬ ‫زض‬ ٜ‫قس‬‫فهّی‬ٜ‫شذیط‬ ‫ثب‬ ُٝ‫ضاث‬ ‫زض‬‫ؾبظی‬
ٜ‫زاز‬ٝٔ‫ثط٘ب‬ ‫ٞبی‬‫٘ٛز‬ ‫ٞبی‬‫آٔس‬ ‫ذٛاٞس‬.
11
15
‫فصل‬4
ِ‫برًاه‬ ‫ساختي‬‫ًَد‬ ‫ٍب‬ ‫ّای‬
‫هی‬ ‫پَضص‬ ‫فصل‬ ‫ایي‬ ِ‫ک‬ ‫هطالبی‬‫دّذ‬
‫زضذٛاؾت‬ ٝ‫ث‬ ‫ضؾیسٌی‬‫ٞبی‬HTTP‫ثب‬APIِ‫٘ٛز‬
‫یه‬ ٗ‫ؾبذت‬"ِ‫ة‬ٚ ِ‫ؽ‬‫ؾطٚی‬"1
RESTful
ٝ‫اضائ‬ُ‫فبی‬ ‫ی‬‫ایؿتب‬ ‫ٞبی‬
ْ‫فط‬ ‫اظ‬ ‫وبضثط‬ ‫ٚضٚزی‬ ‫زضیبفت‬‫ٞب‬
ٕٗ‫ای‬‫ثب‬ ٝٔ‫ثط٘ب‬ ‫ؾبظی‬HTTPS
‫اث‬ ‫ثب‬ ،ُ‫فه‬ ٗ‫ای‬ ‫زض‬ٗ‫ؾبذت‬ ‫ثطای‬ ‫٘ٛز‬ ٝ‫و‬ ‫عاضٞبیی‬‫ؾطٚضٞب‬‫ی‬HTTP‫ٔی‬ ٓٞ‫فطا‬َٚ‫ٔبغ‬ ٚ ،‫قس‬ ‫ذٛاٞیس‬ ‫آقٙب‬ ‫وٙس‬fs(filesystemٝ‫اضائ‬ ‫ثطای‬ ٝ‫و‬ )‫ی‬
ُ‫فبی‬‫ٔی‬ ‫ٔؼطفی‬ ‫اؾت‬ ‫يطٚضی‬ ‫ایؿتب‬ ‫ٞبی‬‫زیٍط‬ َٕٛ‫ٔؼ‬ ‫٘یبظٞبی‬ ٍٝ٘ٛ‫چ‬ ٝ‫و‬ ‫آٔٛذت‬ ‫ذٛاٞیس‬ ٗ‫ٕٞچٙی‬ .‫قٛز‬‫زض‬ٝٔ‫ثط٘ب‬‫ثطآٚضیس‬ ‫ضا‬ ‫ٚة‬ ‫ٞبی‬ُ‫لجی‬ ‫اظ‬ ،
ٗ‫ؾبذت‬ِ‫ة‬ٚ ِ‫ؽ‬‫ؾطٚی‬RESTfulْ‫فط‬ ‫َطیك‬ ‫اظ‬ ‫وبضثط‬ ‫اظ‬ ‫ٚضٚزی‬ ‫زضیبفت‬ ،ٗ‫پبیی‬ ‫ؾُح‬‫ٞب‬‫ی‬HTML‫آح‬ ‫پیكطفت‬ ‫ضنس‬ ،ِ‫ز‬ِٛ‫یه‬ ٖ‫وطز‬ ٗٔ‫ا‬ ٚ ،ُ‫فبی‬
ٝٔ‫ثط٘ب‬‫ثب‬ ‫ٚة‬ ‫ی‬Secure Sockets Layer(SSL)‫٘ٛز‬.
ٝ‫ٞؿت‬ ‫زض‬‫یه‬ ‫٘ٛز‬ ‫ی‬"ٝ‫تدعی‬ٜ‫وٙٙس‬‫ی‬HTTPِٗ‫حی‬ ِٖ‫خطیب‬"2
‫لسضت‬‫ٔٙس‬‫اظ‬ ٝ‫و‬ً‫ا‬‫حسٚز‬1500ٝٙ‫ثٟی‬ ‫وس‬ ٍ‫ذ‬ٖ‫ظثب‬ ٝ‫ث‬ ٜ‫قس‬C‫اؾت‬ ٜ‫قس‬ ُ‫تكىی‬،‫ٚخٛز‬
،‫زاضز‬ٍ‫تٛؾ‬ ٝ‫و‬ٜ‫ؾبظ٘س‬ ‫قرم‬‫٘ٛز‬ ‫ی‬.‫اؾت‬ ٜ‫قس‬ ٝ‫٘ٛقت‬ٗ‫ای‬ٝ‫تدعی‬ٜ‫وٙٙس‬‫ثب‬ ‫تطویت‬ ‫زض‬ ،APIِTCPِ‫ؾُح‬ِ‫خبٚااؾىطیپت‬ ‫اذتیبض‬ ‫زض‬ ‫٘ٛز‬ ٝ‫و‬ ‫پبییٙی‬
‫ٔی‬ ‫لطاض‬‫ثط‬ ،‫زٞس‬‫ا‬ِ‫ض‬ٚ‫ؾط‬ ‫یه‬ ٖ‫یتب‬HTTPِ،ٗ‫پبیی‬ ‫ؾُح‬ ‫ذیّی‬‫ٔی‬ ٓٞ‫فطا‬ ‫ضا‬ ‫ٔٙؼُف‬ ‫ثؿیبض‬ ‫أب‬.‫وٙس‬
1
web service
2
streaming HTTP parser
11
َٚ‫ٔبغ‬ ‫ثیكتط‬ ‫ٔب٘ٙس‬ٝ‫ٞؿت‬ ُ‫زاذ‬ ‫ٞبی‬َِٚ‫ٔبغ‬ ،‫٘ٛز‬ ‫ی‬http‫َطفساضی‬ ‫ؾبزٌی‬ ‫اظ‬‫ٔی‬‫وٙس‬.ٖ‫وطز‬ ٓٞ‫فطا‬API‫ؾُح‬ ‫ٞبی‬ِ‫ثبال‬ٖ‫آؾب‬ ‫ثطای‬‫وبضٞب‬ ٖ‫وطز‬ ‫تط‬
ٜ‫ثطػٟس‬ٓ‫فطی‬ ‫ی‬‫ٚضن‬‫قر‬ ‫ٞبی‬‫م‬‫ٔی‬ ٝ‫ٌصاقت‬ ‫ثبلی‬ ‫ثبِث‬‫قٛ٘س‬.ُ‫قى‬4.1‫وبِجس‬‫قٙبؾی‬ٝٔ‫ثط٘ب‬ ‫یه‬‫ی‬‫تحت‬‫ٔی‬ ‫ٕ٘بیف‬ ‫ضا‬ ‫٘ٛز‬ ‫ٚة‬،‫زٞس‬‫ٔی‬ ٖ‫٘كب‬ ٚٝ‫و‬ ‫زٞس‬
API‫ٔی‬ ٝ‫ٞؿت‬ ‫زض‬ ٗ‫پبیی‬ ‫ؾُح‬ ‫ٞبی‬‫تدطز‬ ٚ ،‫ٔب٘ٙس‬‫ٞب‬ٜٚ‫پیبز‬‫ؾبظی‬‫ٞب‬،‫اخعای‬ ٖ‫آ‬ ‫ضٚی‬ ‫ثط‬ٜ‫ؾبظ٘س‬ٝ‫پبی‬ ‫ی‬‫ٔی‬ ٝ‫ؾبذت‬.‫قٛ٘س‬
‫اظ‬ ‫ثطذی‬ ً‫ب‬ٕ‫ٔؿتمی‬ ُ‫فه‬ ٗ‫ای‬API‫ٔی‬ ‫پٛقف‬ ‫ضا‬ ‫٘ٛز‬ ٗ‫پبیی‬ ‫ؾُح‬ ‫ٞبی‬.‫زٞس‬‫نٛضتی‬ ‫زض‬‫فط‬ ٚ ‫ثبالتط‬ ‫ؾُح‬ ٓ‫ٔفبٞی‬ ٝ‫ث‬ ‫ثیكتط‬ ٝ‫و‬‫ی‬ٓ‫ٚضن‬ٝ‫ػالل‬ ‫ٚة‬ ‫ٞبی‬
ُ‫(ٔث‬ ‫زاضیس‬Express‫ٔی‬ ٚ )‫ذٛاٞیس‬ً‫ب‬ٕ‫ٔؿتمی‬ٖ‫آ‬ ‫ؾطاؽ‬ ٝ‫ث‬‫ثطٚیس‬ ‫ٞب‬‫ٔی‬‫وٙیس‬ ‫ػجٛض‬ ُ‫فه‬ ٗ‫ای‬ ‫اظ‬ ‫تٛا٘یس‬ٓ‫فطی‬ ٗ‫ای‬ ٝ‫ث‬ ‫وتبة‬ ٗ‫ای‬ ‫زض‬ ‫(ٞطچٙس‬‫ٚضن‬‫ٞب‬
‫ٕ٘ی‬ ٝ‫پطزاذت‬)‫قٛز‬ٝٔ‫ثط٘ب‬ ٗ‫ؾبذت‬ ‫اظ‬ ُ‫لج‬ ‫أب‬ .ِ‫ة‬ٚ ‫ٞبی‬‫َٙی‬‫غ‬‫٘ٛز‬ ‫ثب‬‫ثب‬ ‫تب‬ ‫زاقت‬ ‫ذٛاٞیس‬ ‫٘یبظ‬ ،APIِ-HTTPِ‫ثٙیبزی‬‫ٔی‬ ٝ‫و‬ ،‫قٛیس‬ ‫آقٙب‬‫ثؿتطی‬ ‫تٛا٘س‬
ٓ‫فطی‬ ٚ ‫اثعاضٞب‬ ٖ‫قس‬ ٝ‫ؾبذت‬ ‫ثطای‬ ‫ثبقس‬‫ٚضن‬‫ثبالتط‬ ‫ؾُح‬ ‫ٞبی‬ٖ‫آ‬ ‫ثط‬ ‫ٔجتٙی‬.
4.7ِ‫ر‬ٍ‫سر‬ ‫هباًی‬HTTP
11
ٖٛٙ‫او‬ٝ‫اضائ‬ ٝ‫ث‬ ٗ‫پبیی‬ ‫ؾُح‬ ‫ٍ٘بٞی‬ ٝ‫و‬ٝ‫ا٘ساذت‬ ‫٘ٛز‬ ٍ‫تٛؾ‬ ُ‫فبی‬ ‫ی‬‫ٔی‬ ‫ٍ٘بٞی‬ ،ٓ‫ای‬ٝ‫تٛؾؼ‬ ‫اظ‬ ‫زیٍط‬ ‫ذهٛنیت‬ ‫یه‬ ٝ‫ث‬ ٓ‫ا٘ساظی‬ٝٔ‫ثط٘ب‬ ‫ی‬‫ٚة‬ ‫ٞبی‬ٖ‫ٕٞب‬ ٝ‫ث‬ ٝ‫و‬
‫ا‬ْ‫فط‬ ‫اظ‬ ٖ‫وبضثطا‬ ‫ٚضٚزی‬ ‫زضیبفت‬ :‫اؾت‬ ‫ٟٔتط‬ ‫قبیس‬ ٚ ،َٚ‫ٔتسا‬ ٜ‫٘ساظ‬‫ٞبی‬HTML.
4.4‫فرم‬ ‫از‬ ‫کاربراى‬ ‫ٍرٍدی‬ ‫دریافت‬‫ّا‬
ٝٔ‫ثط٘ب‬ٝ‫ث‬ ‫ٚة‬ ‫ٞبی‬‫ٔی‬ ‫زضیبفت‬ ْ‫فط‬ َ‫اضؾب‬ ‫َطیك‬ ‫اظ‬ ‫ضا‬ ٖ‫وبضثطا‬ ‫ٚضٚزی‬ َٚ‫ٔتسا‬ ‫َٛض‬ْ‫ا٘دب‬ ‫٘ٛز‬ .‫وٙٙس‬‫ثؼسی‬ ‫وبضٞبی‬)ُ‫فبی‬ ‫آپّٛز‬ ‫یب‬ ‫اػتجبضؾٙدی‬ ُ‫لجی‬ ‫(اظ‬
‫ٕ٘ی‬ ْ‫ا٘دب‬ ‫قٕب‬ ‫ثطای‬ ‫ضا‬‫زٞس‬—‫تٟٙب‬ ‫٘ٛز‬"ٜ‫زاز‬ٝ٘‫ثس‬ ‫ی‬"1
‫ٔی‬ ٓٞ‫فطا‬ ٖ‫ثطایتب‬ ‫ضا‬.‫وٙس‬‫ثطؾس‬ ‫٘ظط‬ ٝ‫ث‬ ‫٘بُّٔٛة‬ ‫اؾت‬ ٗ‫ٕٔى‬‫أب‬‫ػمبیس‬2
(‫٘ظط‬ ٝ‫ث‬ :ٜ‫ٍ٘بض٘س‬
‫ٔی‬( ‫ػمبیس‬ ‫اظ‬ ‫ٔٙظٛض‬ ً‫ب‬‫تمطیج‬ ٝ‫و‬ ‫ضؾس‬opinions)،ٓ‫تهٕی‬‫ٌیطی‬،‫اخطا‬ ٚ‫ٔٛضز‬ ‫زض‬ٜٛ‫٘ح‬‫ی‬ٜ‫پیبز‬ِ‫ی‬‫ؾبظ‬‫ٔی‬ ٝ‫و‬ ‫اؾت‬ ُ‫ٔؿبئ‬ ‫ثطذی‬ُ‫قى‬ ٝ‫ث‬ ‫تٛا٘ٙس‬‫ٞبی‬
ٜ‫پیبز‬ ‫ٔرتّف‬)‫قٛ٘س‬ ‫ؾبظی‬ٓ‫فطی‬ ٝ‫ث‬ ‫ضا‬‫ٚضن‬‫قرم‬ ‫ٞبی‬‫ثبِث‬‫ٔی‬ ‫ٚاٌصاض‬‫یه‬ ‫ذٛز‬ ‫تب‬ ‫وٙس‬APIِِٗ‫پبیی‬ ‫ؾُح‬.‫وٙس‬ ٓٞ‫فطا‬ ‫ضا‬ ٜ‫ؾبز‬ ٚ ‫وبضآٔس‬
‫ٔی‬ ‫ٍ٘بٞی‬ ،‫ثرف‬ ٗ‫ای‬ ‫زض‬ٗ‫ای‬ ٝ‫ث‬ ٓ‫وٙی‬‫ٔی‬ ٍٝ٘ٛ‫چ‬ ٝ‫و‬:‫زٞیس‬ ْ‫ا٘دب‬ ‫ضا‬ ‫ظیط‬ ‫وبضٞبی‬ ‫تٛا٘یس‬
‫ث‬ ‫ضؾیسٌی‬ٜ‫قس‬ َ‫اضؾب‬ ْ‫فط‬ ‫فیّسٞبی‬ ٝ
ُ‫فبی‬ ٝ‫ث‬ ‫ضؾیسٌی‬‫آپّٛز‬ ‫ٞبی‬‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬ ٜ‫قس‬formidable
ٝ‫ٔحبؾج‬ٝ‫ث‬ ‫آپّٛز‬ ‫پیكطفت‬ ٖ‫ٔیعا‬ ‫ی‬ً٘‫ثالزض‬ ‫نٛضت‬
ٖٛٙ‫او‬ٜٛ‫٘ح‬ ٝ‫ث‬ٜ‫زاز‬ ‫پطزاظـ‬ ‫ی‬ْ‫فط‬ ‫ی‬‫زضیبفتی‬‫٘ٛز‬ ‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬‫ٔی‬ٓ‫پطزاظی‬.
4.4.7‫ارسال‬ ‫فرم‬ ‫فیلذّای‬ ِ‫ب‬ ‫رسیذگی‬ُ‫ضذ‬
1
body data
2
opinions
11
ً‫ب‬ٕٔٛ‫ػ‬‫زض‬‫زضذٛاؾت‬‫ٞب‬‫ی‬‫ی‬‫ضا‬ ْ‫فط‬ ‫اَالػبت‬ ٝ‫و‬‫ا‬‫ٔی‬ َ‫ضؾب‬،‫وٙٙس‬Content-Type‫ٔی‬ ‫ضا‬ ‫ظیط‬ ‫ٔمساض‬ ٚ‫ز‬ ‫اظ‬ ‫یىی‬:‫ٌیطز‬
application/x-www-form-urlencoded—‫پیف‬ ‫ٔمساض‬ْ‫فط‬ ‫ثطای‬ ‫فطو‬‫ٞبی‬HTML.‫اؾت‬
multipart/form-data—‫ٔی‬ ٜ‫اؾتفبز‬ ‫ظٔب٘ی‬ٜ‫زاز‬ ‫یب‬ ،ُ‫فبی‬ ‫حبٚی‬ ْ‫فط‬ ٝ‫و‬ ‫قٛز‬ِ‫ط‬‫غی‬ ‫ٞبی‬-ASCII1
ٜ‫زاز‬ ‫یب‬ ،‫زٚزٚیی‬ ‫ٞبی‬2
.‫ثبقس‬
ٝٔ‫ثط٘ب‬ ‫ثرف‬ ٗ‫ای‬ ‫زض‬‫ٔی‬ ‫ثبظ٘ٛیؿی‬ ‫ضا‬ ‫وبضٞب‬ ‫فٟطؾت‬ ٝ‫ث‬ ٌٛ‫ٔطث‬ ‫ی‬.ٓ‫وٙی‬ ٜ‫اؾتفبز‬ ‫ٔطٚضٌط‬ ٚ ْ‫فط‬ ‫یه‬ ‫اظ‬ ‫تب‬ ٓ‫وٙی‬ٗ‫ای‬ ٝ‫و‬ ‫ظٔب٘ی‬‫یه‬ ،‫ثطؾس‬ ْ‫اتٕب‬ ٝ‫ث‬ ‫وبض‬
ٝٔ‫ثط٘ب‬‫وبضٞب‬ ‫فٟطؾت‬ ‫ثطای‬ ‫ٚة‬ ‫تحت‬ ‫ی‬)‫قٛ٘س‬ ْ‫ا٘دب‬ ‫اؾت‬ ‫لطاض‬ ٝ‫و‬ ‫(وبضٞبیی‬ُ‫قى‬ ٝ‫ٔكبث‬ ٝ‫و‬ ‫زاقت‬ ‫ذٛاٞیس‬4.5.‫ثٛز‬ ‫ذٛاٞس‬
‫ثط٘ب‬ ٗ‫ای‬ ‫زض‬ٝٔ‫یه‬ ،switch( ‫زضذٛاؾت‬ ‫ٔتس‬ ‫ضٚی‬req.methodٝ‫ث‬ )‫ٔی‬ ٜ‫ثطز‬ ‫وبض‬‫ٔؿیط‬ ‫یه‬ ‫تب‬ ،‫قٛز‬‫یبثی‬3
.‫زٞس‬ ُ‫قى‬ ‫ضا‬ ‫زضذٛاؾت‬ ‫ثطای‬ ٜ‫ؾبز‬ٗ‫ای‬
‫زض‬ ّٝ‫ٔؿئ‬‫ٕ٘بی‬4.5‫ٞط‬ .‫اؾت‬ ٜ‫قس‬ ٜ‫زاز‬ ٖ‫٘كب‬URLٝ‫و‬ً‫ب‬‫زلیم‬"/"‫٘جبقس‬‫پبؾد‬ ‫یه‬ ‫ثب‬"404‫٘كس‬ ‫یبفت‬"‫ٔی‬ ٝ‫ٔٛاخ‬.‫قٛز‬ُ‫فؼ‬ ‫ٞط‬HTTP‫اظ‬ ‫غیط‬
GETٚPOST
‫پبؾد‬ ‫یه‬ ‫ثب‬"400‫زضذٛاؾت‬‫٘ب‬‫ٔٙبؾت‬"‫ٔی‬ ٝ‫ٔٛاخ‬‫ضؾیسٌی‬ ‫تٛاثغ‬ .‫قٛز‬ٜ‫وٙٙس‬‫ی‬show()،add()،badRequest()ٚ ،notFound()،
ٝٔ‫ازا‬ ‫زض‬ٜ‫پیبز‬ ‫ثرف‬ ٗ‫ای‬ ‫ی‬‫ٔی‬ ‫ؾبظی‬.‫قٛ٘س‬
1
non-ASCII
2
binary
3
routing
11
‫ٞطچٙس‬HTMLِ‫ٟ٘بیی‬‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬ ً‫ال‬ٕٛ‫ٔؼ‬"‫ٔٛتٛضٞبی‬‫لبِت‬"1
‫ٔی‬ ٝ‫ؾبذت‬َ‫ٔثب‬ ،‫قٛز‬‫ٕ٘بی‬‫ٔی‬ ٜ‫اؾتفبز‬ ٝ‫ضقت‬ ٖ‫ظز‬ ‫پیٛ٘س‬ ‫اظ‬ ‫ؾبزٌی‬ ‫ثطای‬ ‫ظیط‬.‫وٙس‬
ٖ‫وطز‬ ‫ٔمساضزٞی‬ ٝ‫ث‬ ‫٘یبظی‬res.statusCodeٝ‫ث‬ ٖٛ‫چ‬ ‫٘یؿت‬‫پیف‬ ‫نٛضت‬‫ٔمساض‬ ‫فطـ‬200ٝ٘‫(٘كب‬ٝ‫نفح‬ .‫زاضز‬ ‫ضا‬ )‫ٔٛفمیت‬ ‫ی‬‫ی‬HTMLِ
ُ‫حبن‬ُ‫قى‬ ‫زض‬ ‫ٔطٚضٌط‬ ‫زض‬ ٜ‫قس‬4.5.‫اؾت‬ ٜ‫قس‬ ٜ‫زاز‬ ٖ‫٘كب‬
‫تبثغ‬notFound()‫ٔی‬ ‫ضا‬ ‫پبؾد‬ ‫قیء‬‫ضا‬ ‫ٚيؼیت‬ ‫وس‬ ٚ ،‫ٌیطز‬404ٝ٘‫ثس‬ ٚ‫ضا‬ ‫پبؾد‬ ‫ی‬"‫٘كس‬ ‫یبفت‬"ٗ‫تؼیی‬‫ٔی‬:‫وٙس‬
1
template engine
151
‫فصل‬5
ُ‫داد‬ ‫کردى‬ ُ‫رخیر‬ِ‫برًاه‬ ‫ّای‬‫ًَد‬ ‫ی‬
‫هی‬ ‫پَضص‬ ‫فصل‬ ‫ایي‬ ِ‫ک‬ ‫هطالبی‬‫دّذ‬
ٜ‫شذیط‬ٓ‫ؾیؿت‬ ‫زض‬ ٜ‫زاز‬ ‫ی‬ٝ‫(حبفظ‬ ٝ‫حبفظ‬ ‫زض‬ ‫٘یع‬ ٚ ُ‫فبی‬ ِٖ‫ٕٞب‬ ‫یب‬ ‫انّی‬ ‫ی‬RAM)
ٜ‫شذیط‬ٜ‫پبیٍب‬ ‫زض‬ ٜ‫زاز‬ ‫ی‬ٜ‫زاز‬‫ٞبی‬ُٝ‫ضاث‬ ِْٛ‫ٔطؾ‬‫ای‬1
ٜ‫شذیط‬ٜ‫پبیٍب‬ ‫زض‬ ٜ‫زاز‬ ‫ی‬ٜ‫زاز‬ُٝ‫غیطضاث‬ ‫ٞبی‬‫ای‬2
ٝٔ‫ثط٘ب‬ ْ‫تٕب‬ ً‫ب‬‫تمطیج‬ٜ‫شذیط‬ ‫اظ‬ ‫٘ٛػی‬ ٝ‫ث‬ ‫٘یبظ‬ ،ٖ‫آ‬ ‫اظ‬ ‫غیط‬ ٝ‫چ‬ ٚ ‫ٚة‬ ‫ثط‬ ‫ٔجتٙی‬ ٝ‫چ‬ ،‫ٞب‬ٝٔ‫ثط٘ب‬ ٚ ،‫زاض٘س‬ ٜ‫زاز‬ ‫ی‬‫ٔی‬ ‫٘ٛز‬ ‫ثب‬ ٝ‫و‬ ‫ٞبیی‬‫ٔؿتثٙب‬ ٜ‫لبئس‬ ٗ‫ای‬ ‫اظ‬ ‫٘یع‬ ‫ؾبظیس‬
ٜ‫شذیط‬ ‫ثطای‬ ‫ٔٙبؾت‬ ْ‫ٔىب٘یع‬ ‫یه‬ ‫ا٘تربة‬ .‫٘یؿتٙس‬‫ی‬:‫زاضز‬ ‫ثؿتٍی‬ ُٔ‫ػب‬ ‫پٙح‬ ٝ‫ث‬ ٜ‫زاز‬
ٜ‫زاز‬ ٝ‫چ‬‫ٔی‬ ‫ای‬‫قٛز‬ ٜ‫شذیط‬ ‫ذٛاٞس‬
ٜ‫زاز‬ ٝ‫و‬ ‫اؾت‬ ‫٘یبظ‬ ‫ؾطػتی‬ ٝ‫چ‬ ‫ثب‬‫قٛز‬ ‫حفظ‬ ‫ٔٙبؾت‬ ‫وبضایی‬ ‫تب‬ ‫قٛ٘س‬ ٝ‫٘ٛقت‬ ٚ ٜ‫ذٛا٘س‬ ‫ٞب‬
‫زاضز‬ ‫ٚخٛز‬ ٜ‫زاز‬ ‫چمسض‬
ٜ‫زاز‬ ‫اظ‬ ‫ثبیس‬ ‫نٛضت‬ ٝ‫چ‬ ٝ‫ث‬‫پطؼ‬ ‫ٞب‬ٚ‫قٛز‬ ٛ‫خ‬
ٜ‫زاز‬ُ‫لبث‬ ‫چمسض‬ ٚ ‫ٔست‬ ٝ‫چ‬ ‫ثطای‬ ‫ٞب‬ٖ‫إَیٙب‬‫قٛ٘س‬ ٜ‫شذیط‬ ‫ثبیس‬
ٜٛ‫قی‬ٜ‫شذیط‬ ‫ٞبی‬ٜ‫زاز‬ ‫ٍٟ٘ساضی‬ ‫اظ‬ ،ٜ‫زاز‬ ‫ی‬ٝ‫حبفظ‬ ‫زض‬ ‫ٞب‬‫یه‬ ‫ثب‬ ٟٝ‫ٔٛاخ‬ ‫تب‬ ‫ؾطٚض‬ ‫ی‬"ٜ‫پبیٍب‬ ِ‫ت‬‫ٔسیطی‬ ِٓ‫ؾیؿت‬ٜ‫زاز‬‫ی‬"3
ُٔ‫وب‬ٜٛ‫قی‬ ْ‫تٕب‬ ‫أب‬ ،‫اؾت‬ ‫ٔتغیط‬‫ٞب‬
ٝ‫ث‬ ‫٘یبظ‬‫اظ‬ ‫٘ٛػی‬ٝ٘‫ٔٛاظ‬4
.‫زاض٘س‬
ْ‫ٔىب٘یع‬‫پب‬ ‫اظ‬ ٝ‫و‬ ‫ٞبیی‬ِ‫ی‬‫یساض‬‫َٛال٘ی‬ٜ‫زاز‬ ِ‫ت‬‫ٔس‬ٝ‫ؾبذتبضیبفت‬ ٚ ٜ‫پیچیس‬ ‫ٞبی‬‫أىب٘بت‬ ‫ثب‬ ْ‫تٛأ‬ ،ٛ‫خؿتد‬ ‫ثطای‬ ‫لسضتٕٙس‬‫ٔی‬ ‫پكتیجب٘ی‬،‫وٙٙس‬ٝٙ‫ٞعی‬ ُٕ‫ٔتح‬‫ٞبی‬
‫ٔی‬ ‫وبضایی‬ ‫زض‬ ‫تٛخٟی‬ ُ‫لبث‬ٖ‫آ‬ ‫اظ‬ ٜ‫اؾتفبز‬ ٗ‫ثٙبثطای‬ ،‫قٛ٘س‬ٝ‫ث‬ .‫٘یؿت‬ ‫ضاٞجطز‬ ٗ‫ثٟتطی‬ ٝ‫ٕٞیك‬ ‫ٞب‬ٜ‫شذیط‬ ،ٝ‫ٔكبث‬ ‫َٛض‬ٜ‫زاز‬ ‫ی‬ٝ‫حبفظ‬ ‫زض‬ ‫ٞب‬‫ضا‬ ‫وبضایی‬ ‫ؾطٚض‬ ‫ی‬
‫ٔی‬ ‫حساوثط‬ُ‫لبث‬ ‫وٕتط‬ ‫پبیساضی‬ ‫زاضای‬ ‫أب‬ ،‫وٙس‬‫إَیٙب٘ی‬‫ث‬ ‫اٌط‬ ٖٛ‫چ‬ ‫اؾت‬‫ذبٔٛـ‬ ٝٔ‫ط٘ب‬ٜ‫زاز‬ ‫ثطٚز‬ ‫ؾطٚض‬ ‫ثطق‬ ‫یب‬ ‫قٛز‬ ٗ‫ٚضٚق‬‫ٔی‬ ٗ‫ثی‬ ‫اظ‬ ‫ٞب‬.‫ضٚ٘س‬
ٜ‫شذیط‬ ْ‫ٔىب٘یع‬ ْ‫وسا‬ ‫اظ‬ ٝ‫و‬ ‫ٌطفت‬ ‫ذٛاٞیس‬ ٓ‫تهٕی‬ ٍٝ٘ٛ‫چ‬ ‫حبال‬ٝٔ‫ثط٘ب‬ ‫زض‬ ‫ؾبظی‬ٝ‫تٛؾؼ‬ ‫ز٘یبی‬ ‫زض‬ ‫وٙیس؟‬ ٜ‫اؾتفبز‬ ٖ‫تب‬ٝٔ‫ثط٘ب‬ ‫ی‬‫٘یؿت‬ َٕٛ‫غیطٔؼ‬ ،‫٘ٛز‬ ‫ٞبی‬
ِ‫ز‬‫ٔٛاض‬ ‫ثطای‬ ٝ‫و‬-‫ٔرتّف‬ ‫وبضثطز‬،ْ‫ٔىب٘یع‬ ‫اظ‬ٜ‫شذیط‬ ‫ٔرتّف‬ ‫ٞبی‬‫ؾب‬ٝٙ‫ٌعی‬ ٝ‫ؾ‬ ‫ٔٛضز‬ ‫زض‬ ُ‫فه‬ ٗ‫ای‬ ‫زض‬ .‫قٛز‬ ٜ‫اؾتفبز‬ ‫ظی‬‫ٔی‬ ‫نحجت‬ ‫ٔرتّف‬ ‫ی‬:ٓ‫وٙی‬
ٜ‫شذیط‬‫یه‬ ٓ‫تٙظی‬ ٚ ‫٘هت‬ ٖٚ‫ثس‬ ٜ‫زاز‬ ‫ی‬DBMS
ٜ‫شذیط‬‫یه‬ ‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬ ٜ‫زاز‬ ‫ی‬DBMSُٝ‫ضاث‬‫ای‬—ٝ‫ث‬،‫ذهٛل‬MySQLٚPostgreSQL
ٜ‫شذیط‬ٜ‫پبیٍب‬ ‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬ ٜ‫زاز‬ ‫ی‬ٜ‫زاز‬‫ٞبی‬NoSQL—ٝ‫ث‬،‫ذهٛل‬Redis،MongoDBٚ ،Mongoose
ُ‫فه‬ ٗ‫ای‬ ٖ‫پبیب‬ ‫زض‬ٝٔ‫ثط٘ب‬ ‫٘یبظٞبی‬ ٝ‫ث‬ ‫تب‬ ‫وٙیس‬ ٜ‫اؾتفبز‬ ‫ٔىب٘یعٟٔب‬ ٗ‫ای‬ ‫اظ‬ ٍٝ٘ٛ‫چ‬ ٝ‫و‬ ‫زا٘ؿت‬ ‫ذٛاٞیس‬.‫زٞیس‬ ‫پبؾد‬ ‫ذٛز‬ ‫ی‬
ٖ‫آؾب‬ ٝ‫ث‬ ،‫قطٚع‬ ‫ثطای‬ٗ‫پبیی‬ ٚ ٗ‫تطی‬ٜ‫شذیط‬ ‫اظ‬ ‫ؾُح‬ ٗ‫تطی‬‫ؾبظی‬‫زاضز‬ ٖ‫أىب‬ ٝ‫و‬‫ٔی‬ٜ‫شذیط‬ :ٓ‫پطزاظی‬ٜ‫زاز‬ ‫ی‬ٖٚ‫ثس‬ِ‫ؾطٚض‬5
(ٓ‫ؾیؿت‬ ‫یه‬ ‫اظ‬ ٜ‫اؾتفبز‬ ٖٚ‫ثس‬
1
relational
2
nonrelational
3
database management system (DBMS)
4
trade-off
5
serverless
151
‫ٔسیطیت‬‫و‬ٜ‫ٙٙس‬).
5.7ُ‫رخیر‬‫ا‬ ‫بذٍى‬ ُ‫داد‬ ‫ی‬‫هذیریت‬ ‫سیستن‬ ‫یک‬ ‫از‬ ُ‫ستفاد‬ُ‫کٌٌذ‬
ُٝ‫٘م‬ ‫اظ‬،ٓ‫ؾیؿت‬ ‫ٔسیطیت‬ ‫٘ظط‬‫ضاحت‬ٗ‫تطی‬ْ‫ٔىب٘یع‬ٜ‫شذیط‬ ‫ٞبی‬ٖ‫آ‬ ‫ؾبظی‬‫یه‬ ‫اظ‬ ‫ٍٟ٘ساضی‬ ٝ‫ث‬ ْ‫ّٔع‬ ‫ضا‬ ‫قٕب‬ ٝ‫و‬ ‫ٞؿتٙس‬ ‫ٞبیی‬DBMS‫ٕ٘ی‬،‫وٙٙس‬ُ‫لجی‬ ‫اظ‬
ٜ‫شذیط‬ٜ‫شذیط‬ ٚ ،ٝ‫حبفظ‬ ‫زض‬ ‫ؾبظی‬‫یه‬ ٓ‫تٙظی‬ ٚ ‫٘هت‬ ٝ‫ث‬ ‫٘یبظ‬ ‫حصف‬ .ُ‫فبی‬ ‫ثط‬ ‫ٔجتٙی‬ ‫ؾبظی‬DBMSٝٔ‫ثط٘ب‬ ‫٘هت‬ ،‫ٔی‬ ٝ‫و‬ ‫ٞبیی‬ٖ‫آؾب‬ ‫ضا‬ ‫ؾبظیس‬‫ٔی‬ ‫تط‬.‫وٙس‬
ِ‫ز‬ٛ‫ٚخ‬ ْ‫ػس‬‫یه‬DBMS،ٜ‫شذیط‬ٖٚ‫ثس‬ ٜ‫زاز‬ ‫ؾبظی‬ِ‫ضا‬ ‫ؾطٚض‬ٝٙ‫ٌعی‬ ‫یه‬ٝٔ‫ثط٘ب‬ ‫ثطای‬ ‫ٔٙبؾت‬ ‫ی‬ٖ‫آ‬ ٖ‫وبضثطا‬ ٝ‫و‬ ‫٘ٛز‬ ‫ٞبی‬‫ٞب‬‫ؾرت‬ ‫ضٚی‬ ‫ضا‬‫افعاض‬‫ذٛز‬ٖ‫قب‬
‫وطز‬ ‫ذٛاٞٙس‬ ‫اخطا‬‫ٔی‬‫وٙس‬ٝٔ‫ثط٘ب‬ ُ‫(ٔث‬ٝٔ‫ثط٘ب‬ ‫زیٍط‬ ٚ ‫ٚة‬ ‫ٞبی‬‫ٞبی‬TCP/IPٙٔ ‫ثؿیبض‬ ٗ‫ٕٞچٙی‬ .)‫اثعاضٞبی‬ ‫ثطای‬ ‫بؾت‬1
"ٖ‫فطٔب‬ ٍ‫ذ‬ ٍ‫ٚاؾ‬"2
(CLI)
‫اثعاض‬ ‫یه‬ :‫اؾت‬CLIٜ‫شذیط‬ ٝ‫ث‬ ‫٘یبظ‬ ‫اؾت‬ ٗ‫ٕٔى‬ ‫٘ٛز‬ ‫ثط‬ ‫ٔجتٙی‬‫اظ‬ ٜ‫اؾتفبز‬ ‫ثطای‬ ٝ‫و‬ ‫٘رٛاٞس‬ ‫وبضثط‬ ً‫ال‬‫احتٕب‬ ‫أب‬ ،‫ثبقس‬ ٝ‫زاقت‬ ٜ‫زاز‬ ‫ی‬ٗ‫ای‬‫اثعاض‬‫زضٌیط‬‫ثطپبیی‬
ِ‫ض‬ٚ‫ؾط‬ ‫یه‬MySQL.‫قٛز‬
ٝ‫چ‬ ٝ‫و‬ ‫آٔٛذت‬ ‫ذٛاٞیس‬ ،‫ثرف‬ ٗ‫ای‬ ‫زض‬ٜ‫شذیط‬ ‫اظ‬ ٍٝ٘ٛ‫چ‬ ٚ ‫ٚلت‬ٜ‫شذیط‬ ٚ ٝ‫حبفظ‬ ‫زض‬ ‫ؾبظی‬ٗ‫ای‬ ‫زٚی‬ ‫ٞط‬ ٝ‫و‬ ،‫وٙیس‬ ٜ‫اؾتفبز‬ ُ‫فبی‬ ‫ثط‬ ‫ٔجتٙی‬ ‫ؾبظی‬َ‫ا‬ ‫ٞب‬َِ‫قىب‬
ٜ‫شذیط‬ ‫انّی‬‫ؾبظی‬ٖٚ‫ثس‬ِ‫ؾطٚض‬.‫ٞؿتٙس‬ٜ‫ؾبز‬ ‫ثب‬ٗ‫ای‬ ٗ‫تطی‬ٜ‫شذیط‬ ‫یؼٙی‬ ٚ‫ز‬ٔ ‫قطٚع‬ ٝ‫حبفظ‬ ‫زض‬ ‫ؾبظی‬‫ی‬.ٓ‫وٙی‬
5.7.7ُ‫رخیر‬ِ‫حافظ‬ ‫در‬ ‫سازی‬
ٝٔ‫ثط٘ب‬ ‫زض‬َٛ‫فه‬ ‫زض‬ َ‫ٔثب‬ ‫ٞبی‬2ٚ4ٜ‫شذیط‬ ،.‫قٛز‬ ‫ٍٟ٘ساضی‬ ‫وبضٞب‬ ٚ ‫وبضثطٞب‬ ٝ‫ث‬ ٌٛ‫ٔطث‬ ‫خعئیبت‬ ‫تب‬ ‫ٌطفت‬ ‫لطاض‬ ٜ‫اؾتفبز‬ ‫ٔٛضز‬ ٝ‫حبفظ‬ ‫زض‬ ‫ؾبظی‬ٜ‫شذیط‬
ٜ‫شذیط‬ ‫ثطای‬ ‫ٔتغیطٞب‬ ‫اظ‬ ،ٝ‫حبفظ‬ ‫زض‬ ‫ؾبظی‬ٜ‫زاز‬ ‫ی‬‫ٔی‬ ٜ‫اؾتفبز‬ ‫ٞب‬ٜ‫زاز‬ ٗ‫ای‬ ٗ‫٘ٛقت‬ ٚ ٖ‫ذٛا٘س‬ .‫وٙس‬ٖ‫ٕٞب‬ ‫أب‬ ،‫اؾت‬ ‫ؾطیغ‬ ‫ٞب‬‫پیف‬ ٝ‫و‬ ‫َٛض‬ٓ‫وطزی‬ ٖ‫ثیب‬ ‫تط‬
ٜ‫زاز‬‫ذبٔٛـ‬ ٖ‫ظٔب‬ ‫زض‬ ‫ضا‬ ‫ٞب‬.‫زاز‬ ‫ذٛاٞیس‬ ‫زؾت‬ ‫اظ‬ ٝٔ‫ثط٘ب‬ ٖ‫قس‬ ٗ‫ضٚق‬
ٜ‫ایس‬ ‫وبضثطز‬ٜ‫شذیط‬ َ‫آ‬‫ثرف‬ ‫ثطای‬ ،ٝ‫حبفظ‬ ‫زض‬ ‫ؾبظی‬‫ز‬ ‫وٛچه‬ ‫ٞبی‬‫ٔی‬ ‫لطاض‬ ‫زؾتطؾی‬ ‫ٔٛضز‬ ‫ثؿیبض‬ ٝ‫و‬ ٜ‫از‬ٗ‫ای‬ ‫وبضثطز‬ ‫یه‬ .‫اؾت‬ ‫ٌیط٘س‬‫ٔی‬ ‫چٙیٙی‬‫یه‬ ‫تٛا٘س‬
ٝ‫نفح‬ ‫اظ‬ ٜ‫قس‬ ْ‫ا٘دب‬ ‫ثبظزیسٞبی‬ ‫ػسز‬ ٝ‫و‬ ‫ثبقس‬ ٜ‫قٕبض٘س‬( ‫ضا‬ٜ‫وطز‬ ‫وبض‬ ٝ‫ث‬ ‫قطٚع‬ ٝٔ‫ثط٘ب‬ ٝ‫و‬ ٝ‫ٔطتج‬ ٗ‫آذطی‬ ٖ‫ظٔب‬ ‫اظ‬‫ٔی‬ ‫ٍٟ٘ساضی‬ )‫ظیط‬ ‫وس‬ ،َ‫ٔثب‬ ‫ثطای‬ .‫وٙس‬
ٜ‫زضٌب‬ ‫ضٚی‬ ‫ضا‬ ‫ٚة‬ ِ‫ض‬ٚ‫ؾط‬ ‫یه‬8888‫ٔی‬ ٜ‫ضا‬‫و‬ ‫ا٘ساظز‬‫زضذٛاؾت‬ ‫تؼساز‬ ٝ‫ٔی‬ ‫ضا‬ ‫ٞب‬:‫قٕطز‬
ٝٔ‫ثط٘ب‬ ‫ثطای‬ٜ‫شذیط‬ ٝ‫ث‬ ‫٘یبظ‬ ٝ‫و‬ ‫ٞبیی‬‫ذبٔٛـ‬ ‫اظ‬ ُ‫ٔؿتم‬ ‫ثتٛا٘ٙس‬ ٝ‫و‬ ‫زاض٘س‬ ‫اَالػبتی‬ ‫ؾبظی‬ٜ‫شذیط‬ ،‫ثٕب٘ٙس‬ ‫پبیساض‬ ‫ؾطٚض‬ ٚ ٝٔ‫ثط٘ب‬ ٖ‫قس‬ ٗ‫ضٚق‬‫ثط‬ ‫ٔجتٙی‬ ‫ؾبظی‬
‫ٔٙبؾت‬ ‫اؾت‬ ٗ‫ٕٔى‬ ُ‫فبی‬.‫ثبقس‬ ‫تط‬
5.7.2ُ‫رخیر‬‫فایل‬ ‫بر‬ ‫هبتٌی‬ ‫سازی‬
ٜ‫شذیط‬ُ‫فبی‬ ‫ثط‬ ‫ٔجتٙی‬ ‫ؾبظی‬ٜ‫شذیط‬ ‫ثطای‬ ُ‫فبی‬ ِٓ‫ؾیؿت‬ ‫اظ‬ٜ‫زاز‬ ‫ی‬‫ٔی‬ ٜ‫اؾتفبز‬ ‫ٞب‬.‫وٙس‬ٝ‫تٛؾؼ‬ٜ‫شذیط‬ ‫٘ٛع‬ ٗ‫ای‬ ‫اظ‬ ‫اغّت‬ ٖ‫زٞٙسٌب‬‫اَالػبت‬ ‫ثطای‬ ‫ؾبظی‬
‫ٔی‬ ٜ‫اؾتفبز‬ ٝٔ‫ثط٘ب‬ ‫تٙظیٕبت‬ٜٚ‫ػال‬ ‫أب‬ ،‫وٙٙس‬‫ٔی‬ ٜ‫اخبظ‬ ‫قٕب‬ ٝ‫ث‬ ٖ‫ثطآ‬ٜ‫زاز‬ ‫آؾب٘ی‬ ٝ‫ث‬ ٝ‫و‬ ‫زٞس‬ٝ‫ث‬ ‫وٙیس‬ ‫پبیساض‬ ‫ضا‬ ‫ٞبیی‬‫ذبٔٛـ‬ ‫ثب‬ ٝ‫و‬ ‫٘حٛی‬ٝٔ‫ثط٘ب‬ ٖ‫قس‬ ٗ‫ضٚق‬
‫پ‬ ‫ؾطٚض‬ ‫یب‬.‫٘كٛ٘س‬ ‫بن‬
1
tools
2
command line interface (CLI)

More Related Content

What's hot

Aitbar ka-mausam cropped
Aitbar ka-mausam croppedAitbar ka-mausam cropped
Aitbar ka-mausam cropped
muhammad azhar hussain
 
Nijaat cropped
Nijaat croppedNijaat cropped
Nijaat cropped
muhammad azhar hussain
 
Web scale backups for MySQL, Алексей Копытов (Percona)
Web scale backups for MySQL, Алексей Копытов (Percona)Web scale backups for MySQL, Алексей Копытов (Percona)
Web scale backups for MySQL, Алексей Копытов (Percona)
Ontico
 
شکافت انواع بازاریابی
شکافت انواع بازاریابیشکافت انواع بازاریابی
شکافت انواع بازاریابی
morteza heydari
 
مادة الاسواق المالبيه والبورصات 2015
مادة الاسواق المالبيه والبورصات 2015مادة الاسواق المالبيه والبورصات 2015
مادة الاسواق المالبيه والبورصات 2015Taha Ahmed
 
Bezpieczenstwo Portali Spolecznosciowych W Ujeciu Robakow Web 20 Grillit 2008...
Bezpieczenstwo Portali Spolecznosciowych W Ujeciu Robakow Web 20 Grillit 2008...Bezpieczenstwo Portali Spolecznosciowych W Ujeciu Robakow Web 20 Grillit 2008...
Bezpieczenstwo Portali Spolecznosciowych W Ujeciu Robakow Web 20 Grillit 2008...
Logicaltrust pl
 
پاسخنامه فصل 6 تا 8 زیست دوم
پاسخنامه فصل 6 تا 8 زیست دومپاسخنامه فصل 6 تا 8 زیست دوم
پاسخنامه فصل 6 تا 8 زیست دوم
Ali Keramat
 
Pakshyanna rang kase milale
Pakshyanna rang kase milalePakshyanna rang kase milale
Pakshyanna rang kase milalemarathivaachak
 
Sessions &Cookies
Sessions &CookiesSessions &Cookies
Sessions &Cookies
Ahmed Saihood
 

What's hot (9)

Aitbar ka-mausam cropped
Aitbar ka-mausam croppedAitbar ka-mausam cropped
Aitbar ka-mausam cropped
 
Nijaat cropped
Nijaat croppedNijaat cropped
Nijaat cropped
 
Web scale backups for MySQL, Алексей Копытов (Percona)
Web scale backups for MySQL, Алексей Копытов (Percona)Web scale backups for MySQL, Алексей Копытов (Percona)
Web scale backups for MySQL, Алексей Копытов (Percona)
 
شکافت انواع بازاریابی
شکافت انواع بازاریابیشکافت انواع بازاریابی
شکافت انواع بازاریابی
 
مادة الاسواق المالبيه والبورصات 2015
مادة الاسواق المالبيه والبورصات 2015مادة الاسواق المالبيه والبورصات 2015
مادة الاسواق المالبيه والبورصات 2015
 
Bezpieczenstwo Portali Spolecznosciowych W Ujeciu Robakow Web 20 Grillit 2008...
Bezpieczenstwo Portali Spolecznosciowych W Ujeciu Robakow Web 20 Grillit 2008...Bezpieczenstwo Portali Spolecznosciowych W Ujeciu Robakow Web 20 Grillit 2008...
Bezpieczenstwo Portali Spolecznosciowych W Ujeciu Robakow Web 20 Grillit 2008...
 
پاسخنامه فصل 6 تا 8 زیست دوم
پاسخنامه فصل 6 تا 8 زیست دومپاسخنامه فصل 6 تا 8 زیست دوم
پاسخنامه فصل 6 تا 8 زیست دوم
 
Pakshyanna rang kase milale
Pakshyanna rang kase milalePakshyanna rang kase milale
Pakshyanna rang kase milale
 
Sessions &Cookies
Sessions &CookiesSessions &Cookies
Sessions &Cookies
 

Viewers also liked

Rivista "Il Forestale"
Rivista "Il Forestale"Rivista "Il Forestale"
Rivista "Il Forestale"
Alex Drastico
 
Juliocolmenarezsaiae
JuliocolmenarezsaiaeJuliocolmenarezsaiae
Juliocolmenarezsaiae
julioccr90
 
THESIS final
THESIS finalTHESIS final
THESIS final
Adam Blazek
 
Mobile moon portable -lanscape painting
Mobile moon portable -lanscape painting Mobile moon portable -lanscape painting
Mobile moon portable -lanscape painting
Liven Ye
 
эльконин
эльконинэльконин
эльконин
Наталья Рудь
 
Employment oppertunities
Employment oppertunitiesEmployment oppertunities
Employment oppertunities
Muhammad Ali
 
踏んだり蹴ったり(http://f-and-k.sakura.ne.jp/toppage.html)詳細
踏んだり蹴ったり(http://f-and-k.sakura.ne.jp/toppage.html)詳細踏んだり蹴ったり(http://f-and-k.sakura.ne.jp/toppage.html)詳細
踏んだり蹴ったり(http://f-and-k.sakura.ne.jp/toppage.html)詳細
Tatsuya Kimachi
 
инновационная площадка
инновационная площадкаинновационная площадка
инновационная площадка
Наталья Рудь
 
Elemento químico del grupo
Elemento químico del grupoElemento químico del grupo
Elemento químico del grupo
Jose Vilca
 
Resume- Ellie Morehouse
Resume- Ellie MorehouseResume- Ellie Morehouse
Resume- Ellie Morehouse
Ellie Morehouse
 
Atoms science ppt.ppt
Atoms science ppt.pptAtoms science ppt.ppt
Atoms science ppt.ppt
sanyammmm
 
Gitgit culture
Gitgit cultureGitgit culture
Gitgit culture
Muhammad Ali
 
Punjabi culture
Punjabi culturePunjabi culture
Punjabi culture
Muhammad Ali
 

Viewers also liked (13)

Rivista "Il Forestale"
Rivista "Il Forestale"Rivista "Il Forestale"
Rivista "Il Forestale"
 
Juliocolmenarezsaiae
JuliocolmenarezsaiaeJuliocolmenarezsaiae
Juliocolmenarezsaiae
 
THESIS final
THESIS finalTHESIS final
THESIS final
 
Mobile moon portable -lanscape painting
Mobile moon portable -lanscape painting Mobile moon portable -lanscape painting
Mobile moon portable -lanscape painting
 
эльконин
эльконинэльконин
эльконин
 
Employment oppertunities
Employment oppertunitiesEmployment oppertunities
Employment oppertunities
 
踏んだり蹴ったり(http://f-and-k.sakura.ne.jp/toppage.html)詳細
踏んだり蹴ったり(http://f-and-k.sakura.ne.jp/toppage.html)詳細踏んだり蹴ったり(http://f-and-k.sakura.ne.jp/toppage.html)詳細
踏んだり蹴ったり(http://f-and-k.sakura.ne.jp/toppage.html)詳細
 
инновационная площадка
инновационная площадкаинновационная площадка
инновационная площадка
 
Elemento químico del grupo
Elemento químico del grupoElemento químico del grupo
Elemento químico del grupo
 
Resume- Ellie Morehouse
Resume- Ellie MorehouseResume- Ellie Morehouse
Resume- Ellie Morehouse
 
Atoms science ppt.ppt
Atoms science ppt.pptAtoms science ppt.ppt
Atoms science ppt.ppt
 
Gitgit culture
Gitgit cultureGitgit culture
Gitgit culture
 
Punjabi culture
Punjabi culturePunjabi culture
Punjabi culture
 

Nodejs_Subset

  • 1.
  • 2. ‫با‬ ‫آضٌایی‬Node.js ِ‫ترجو‬ ً‫ا‬‫تقریب‬ ‫کتاب‬ ‫ایي‬‫است‬ ‫ای‬‫از‬5‫کتاب‬ ‫از‬ ‫اٍل‬ ‫فصل‬Node.js in Action ‫سریاًی‬ ‫هحوذ‬ :ِ‫ترجو‬ :‫قیوت‬5555‫تَهاى‬ :‫صفحات‬ ‫تعذاد‬731 ‫فایل‬ ‫ایي‬‫صفحات‬ ‫از‬ ‫برخی‬ ‫حاٍی‬ِ‫ًسخ‬ ‫خریذ‬ ‫برای‬ ‫توایل‬ ‫صَرت‬ ‫در‬ .‫است‬ ‫کتاب‬‫کاهل‬ ‫الکترًٍیکی‬ ‫ی‬ ‫هی‬‫با‬ ‫تَاًیذ‬soryani@chmail.irِ‫ب‬ ‫یا‬ ،‫بگیریذ‬ ‫تواس‬‫لیٌک‬ ‫ایي‬.‫فرهاییذ‬ ِ‫هراجع‬
  • 3. ِ‫هقذه‬ ‫بخص‬7ً‫هبا‬‫ی‬‫ًَد‬ ‫فصل‬7ِ‫ب‬Node.js‫خَش‬‫آهذ‬‫ی‬‫ذ‬ 1.1‫ثٙب‬ٜ‫قس‬‫ثط‬‫خبٚااؾىط‬‫ی‬‫پت‬ 1.2ٖٚ‫آؾٙىط‬ٚ‫ضذسازٔحٛض‬:‫ٔطٚضٌط‬ 1.3ٖٚ‫آؾٙىط‬ٚ‫ضذسازٔحٛض‬:‫ؾطٚض‬ 1.4ٝٔ‫ثط٘ب‬‫ٞب‬‫ی‬DIRTY 1.5ٝ‫ث‬‫نٛضت‬‫پ‬‫ی‬‫ف‬‫فطو‬DIRTY 1.5.1‫ی‬‫ه‬َ‫ٔثب‬ٜ‫ؾبز‬‫ی‬ٖٚ‫آؾٙىط‬ 1.5.2"ِ‫ض‬ٚ‫ؾط‬HTTPِ"،ٜ‫ؾبز‬‫ثب‬‫ذطٚخ‬‫ی‬Hello World 1.5.3ٝ‫ث‬‫خط‬‫ی‬ٖ‫ب‬‫زض‬ٖ‫آٚضز‬ٜ‫زاز‬ 1.6ٝ‫ذالن‬ ‫فصل‬2‫ساختي‬‫ی‬‫ک‬ِ‫برًاه‬‫ی‬‫چت‬‫چٌذ‬ِ‫اتاق‬ 2.1‫ٔطٚض‬‫ی‬‫ثط‬ٝٔ‫ثط٘ب‬ 2.2٘‫ی‬‫بظٔٙس‬‫ی‬‫ٞب‬‫ی‬ٝٔ‫ثط٘ب‬ٜٚ‫آٔبز‬‫ؾبظ‬‫ی‬ِٚ‫ا‬‫ی‬ٝ 2.2.1ٝ‫اضائ‬‫ی‬HTTPٚWebSocket 2.2.2ٗ‫ؾبذت‬‫ؾبذتبض‬‫فب‬‫ی‬ُٝٔ‫ثط٘ب‬ 2.2.3‫ٔؼ‬‫ی‬ٖٗ‫وطز‬ٍ‫ٚاثؿت‬‫ی‬‫ٞب‬ 2.2.4‫٘هت‬ٖ‫وطز‬ٍ‫ٚاثؿت‬‫ی‬‫ٞب‬ 2.3ٝ‫اضائ‬ٖ‫وطز‬HTML،CSS،ٚJAVASCRIPTٌِٛ‫ٔطث‬ٝ‫ث‬‫ؾٕت‬‫وبضثط‬ٝٔ‫ثط٘ب‬ 2.3.1ٗ‫ؾبذت‬‫ی‬‫ه‬"‫ؾطٚض‬‫فب‬‫ی‬ُِ-‫ا‬‫ی‬‫ؿتب‬‫ی‬"‫پب‬‫ی‬ٝ 2.3.2ٝ‫ايبف‬ٖ‫وطز‬‫فب‬‫ی‬ُ‫ٞب‬‫ی‬HTMLٚCSS 2.4‫ضؾ‬‫ی‬ٌ‫س‬‫ی‬ٝ‫ث‬َ‫تجبز‬‫پ‬‫ی‬ْ‫ب‬ٌٛ‫ٔطث‬ٝ‫ث‬‫چت‬‫ثب‬ٜ‫اؾتفبز‬‫اظ‬SOCKET.IO 2.4.1ٜ‫آٔبز‬ٖ‫وطز‬‫ؾطٚض‬Socket.IO 2.4.2‫ضؾ‬‫ی‬ٌ‫س‬‫ی‬ٝ‫ث‬‫ؾٙبض‬‫ی‬ٛ‫ٞب‬ٚ‫ضذسازٞب‬‫ی‬‫ٔرتّف‬ٝٔ‫ثط٘ب‬ 2.5ٜ‫اؾتفبز‬‫اظ‬‫خبٚااؾىط‬‫ی‬‫پت‬‫ؾٕت‬‫وبضثط‬‫ثطا‬‫ی‬ٍ‫ٚاؾ‬‫وبضثط‬‫ی‬ٝٔ‫ثط٘ب‬ 2.5.1َ‫اضؾب‬‫پ‬‫ی‬ْ‫ب‬‫ٞب‬ٚ‫تغ‬‫یی‬‫ط‬‫اتبق‬/ْ‫٘ب‬ٝ‫ث‬‫ؾطٚض‬ 2.5.2‫ٕ٘ب‬‫ی‬‫ف‬‫پ‬‫ی‬ْ‫ب‬‫ٞب‬ٚ‫اتبق‬‫ٞب‬‫ی‬‫ٔٛخٛز‬‫زض‬ٍ‫ٚاؾ‬‫وبضثط‬‫ی‬
  • 4. 2.6ٝ‫ذالن‬ ‫فصل‬3ً‫هبا‬‫ی‬ِ‫برًاه‬ًَ‫ی‬‫س‬‫ی‬‫با‬‫ًَد‬ 3.1ٖ‫ؾبظٔب‬ٞ‫ز‬‫ی‬ٜٚ‫اؾتفبز‬‫ی‬‫ٔدسز‬‫اظ‬‫ػّٕىطز‬‫زض‬‫٘ٛز‬ 3.1.1ٗ‫ؾبذت‬َٚ‫ٔبغ‬‫ٞب‬ 3.1.2ٟ‫ث‬‫ی‬ٝٙ‫ؾبظ‬‫ی‬‫ؾبذت‬َٚ‫ٔبغ‬‫ثب‬ٜ‫اؾتفبز‬‫اظ‬module.exports 3.1.3ٜ‫اؾتفبز‬‫ی‬‫ٔدسز‬‫اظ‬َٚ‫ٔبغ‬‫ٞب‬‫ثب‬ٜ‫اؾتفبز‬‫اظ‬ٝ‫پٛق‬‫ی‬node_modules 3.1.4‫تصوطات‬ 3.2ٙ‫تى‬‫ی‬‫ه‬‫ٞب‬‫ی‬ٝٔ‫ثط٘ب‬ٛ٘‫ی‬‫ؿ‬‫ی‬ٖٚ‫آؾٙىط‬ 3.2.1‫ضؾ‬‫ی‬ٌ‫س‬‫ی‬ٝ‫ث‬‫ضذساز‬‫ٞب‬‫ی‬‫ته‬ٝ‫ٔطتج‬‫ا‬‫ی‬‫ثب‬َ‫وب‬‫ثه‬‫ٞب‬ 3.2.2‫ضؾ‬‫ی‬ٌ‫س‬‫ی‬ٝ‫ث‬‫ضذسازٞب‬‫ی‬‫تىطاض‬ٜ‫قٛ٘س‬‫ثب‬ٜ‫نبزضوٙٙس‬‫ٞب‬‫ی‬‫ضذساز‬ 3.2.3‫چبِف‬‫ٞب‬‫ی‬‫ٔٛخٛز‬‫زض‬ٝ‫تٛؾؼ‬‫ی‬ٖٚ‫آؾٙىط‬ 3.3‫تطت‬‫ی‬‫ت‬‫ثرك‬‫ی‬ٖ‫س‬ٝ‫ث‬‫ُٔٙك‬ٖٚ‫آؾٙىط‬ 3.3.1ٝ‫چ‬ٖ‫ظٔب‬‫اظ‬َ‫وٙتط‬‫خط‬‫ی‬ٖ‫ب‬ُ‫ذ‬‫ی‬ٜ‫اؾتفبز‬ٙ‫و‬‫ی‬ٓ 3.3.2‫پ‬‫ی‬ٜ‫بز‬‫ؾبظ‬‫ی‬َ‫وٙتط‬‫خط‬‫ی‬ٖ‫ب‬ُ‫ذ‬‫ی‬ 3.3.3‫پ‬‫ی‬ٜ‫بز‬‫ؾبظ‬‫ی‬َ‫وٙتط‬‫خط‬‫ی‬ٖ‫ب‬‫ٔٛاظ‬‫ی‬ 3.3.4ٜ‫ثٟط‬ٗ‫ٌطفت‬‫اظ‬‫اثعاضٞب‬‫ی‬ٝ‫خبٔؼ‬‫ؾبذت‬ 3.4ٝ‫ذالن‬ ‫بخص‬2ِ‫تَسع‬‫ی‬ِ‫برًاه‬‫ّا‬‫ی‬‫ٍب‬‫با‬‫ًَد‬ ‫فصل‬4‫ساختي‬ِ‫برًاه‬‫ّا‬‫ی‬‫ٍب‬‫ًَد‬ 4.1٘‫ٔجب‬‫ی‬ِ‫ض‬ٚ‫ؾط‬HTTP 4.1.1ٜٛ‫٘ح‬‫ی‬ٝ‫اضائ‬‫ی‬‫زضذٛاؾت‬‫ٞب‬‫ی‬HTTPِ‫ٚضٚز‬‫ی‬،ٝ‫ث‬ٝ‫تٛؾؼ‬،ٖ‫زٞٙسٌب‬ٍ‫تٛؾ‬‫٘ٛز‬ 4.1.2‫ی‬‫ه‬ِ‫ض‬ٚ‫ؾط‬HTTPِ‫پب‬‫ی‬ٝٝ‫و‬‫ثب‬"Hello World"‫پبؾد‬ٔ‫ی‬‫زٞس‬ 4.1.3ٖ‫ذٛا٘س‬ُ‫ؾطفه‬‫ٞب‬‫ی‬‫زضذٛاؾت‬ٚ‫تؼ‬‫یی‬ُٗ‫ؾطفه‬‫ٞب‬‫ی‬‫پبؾد‬ 4.1.4‫تؼ‬‫یی‬ٗ‫وس‬‫ٚيؼ‬‫ی‬‫ت‬‫ی‬‫ه‬‫پبؾد‬HTTP 4.2ٗ‫ؾبذت‬‫ی‬‫ه‬ٚ‫ؾط‬‫ی‬ِ‫ؽ‬ِ‫ة‬ٚRESTFUL 4.2.1ٗ‫ؾبذت‬‫ٔٙبثغ‬‫ثب‬‫زضذٛاؾت‬‫ٞب‬‫ی‬POST 4.2.2‫ٚاوك‬‫ی‬‫ٔٙبثغ‬‫ثب‬‫زضذٛاؾت‬‫ٞب‬‫ی‬GET 4.2.3‫حصف‬ٖ‫وطز‬‫ٔٙبثغ‬‫ثب‬‫زضذٛاؾت‬‫ٞب‬‫ی‬DELETE
  • 5. 4.3ٝ‫اضائ‬‫ی‬‫فب‬‫ی‬ُ‫ٞب‬‫ی‬‫ا‬‫ی‬‫ؿتب‬ 4.3.1ٗ‫ؾبذت‬‫ی‬‫ه‬ِ‫ض‬ٚ‫ؾط‬‫فب‬‫ی‬ُِ-‫ا‬‫ی‬‫ؿتب‬ 4.3.2‫ضؾ‬‫ی‬ٌ‫س‬‫ی‬ٝ‫ث‬‫ذُبٞب‬‫ی‬‫ؾطٚض‬ 4.3.3‫ضؾ‬‫ی‬ٌ‫س‬‫ی‬ٝ‫ث‬‫ذُب‬ٝ‫ث‬‫نٛضت‬‫پ‬‫ی‬ٍ‫ك‬‫ی‬ٝ٘‫طا‬‫ثب‬fs.stat 4.4‫زض‬‫ی‬‫بفت‬‫ٚضٚز‬‫ی‬ٖ‫وبضثطا‬‫اظ‬ْ‫فط‬‫ٞب‬ 4.4.1‫ضؾ‬‫ی‬ٌ‫س‬‫ی‬ٝ‫ث‬‫ف‬‫ی‬‫ّسٞب‬‫ی‬ْ‫فط‬َ‫اضؾب‬ٜ‫قس‬ 4.4.2‫ضؾ‬‫ی‬ٌ‫س‬‫ی‬ٝ‫ث‬‫فب‬‫ی‬ُ‫ٞب‬‫ی‬‫آپّٛز‬ٜ‫قس‬‫ثب‬ٜ‫اؾتفبز‬‫اظ‬formidable 4.4.3ٝ‫ٔحبؾج‬‫ی‬ٔ‫ی‬ٖ‫عا‬‫پ‬‫ی‬‫كطفت‬‫آپّٛز‬ 4.5ٗٔ‫ا‬ٖ‫وطز‬ٝٔ‫ثط٘ب‬‫ی‬‫قٕب‬ 4.6ٝ‫ذالن‬ ‫فصل‬5‫رخ‬‫ی‬ُ‫ر‬‫کردى‬ُ‫داد‬‫ّا‬‫ی‬ِ‫برًاه‬‫ی‬‫ًَد‬ 5.1‫شذ‬‫ی‬ٜ‫ط‬‫ی‬ٜ‫زاز‬ٖٚ‫ثس‬ٜ‫اؾتفبز‬‫اظ‬‫ی‬‫ه‬‫ؾ‬‫ی‬ٓ‫ؿت‬‫ٔس‬‫ی‬‫ط‬‫ی‬‫ت‬ٜ‫وٙٙس‬ 5.1.1‫شذ‬‫ی‬ٜ‫ط‬‫ؾبظ‬‫ی‬‫زض‬ٝ‫حبفظ‬ 5.1.2‫شذ‬‫ی‬ٜ‫ط‬‫ؾبظ‬‫ی‬ٙ‫ٔجت‬‫ی‬‫ثط‬‫فب‬‫ی‬ُ 5.2‫ؾ‬‫ی‬ٓ‫ؿت‬‫ٞب‬‫ی‬‫ٔس‬‫ی‬‫ط‬‫ی‬‫ت‬‫پب‬‫ی‬ٜ‫ٍب‬ٜ‫زاز‬‫ی‬ُٝ‫ضاث‬‫ا‬‫ی‬ 5.2.1MySQL 5.2.2PostgreSQL 5.3‫پب‬‫ی‬ٜ‫ٍب‬ٜ‫زاز‬‫ٞب‬‫ی‬NOSQL 5.3.1Redis 5.3.2MongoDB 5.3.3Mongoose 5.4ٝ‫ذالن‬
  • 6. ِ‫هقذه‬ node.jsٝٔ‫ثط٘ب‬ ‫ثطای‬ ‫اؾت‬ ‫پّتفطٔی‬ٖ‫ظثب‬ ‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬ ،‫٘ٛیؿی‬JavaScript‫أىب٘بت‬ ‫اظ‬ ‫فطاتط‬ ‫أىب٘بتی‬ ٝ‫و‬ ،JavaScript‫ٔی‬ ٓٞ‫فطا‬ ‫ضا‬ ٝ‫پبی‬‫ٔی‬ ٚ ،‫وٙس‬ٖ‫تٛا‬ ٝٔ‫ثط٘ب‬ ٖ‫آ‬ ‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬ٝٔ‫ثط٘ب‬ ‫اظ‬ ‫فطاتط‬ ‫ٞبیی‬‫ٔی‬ ‫اخطا‬ ‫ٔطٚضٌطٞب‬ ‫ضٚی‬ ٝ‫و‬ ‫٘ٛقت‬ ‫ٞبیی‬‫فٙبٚضی‬ ‫ثب‬ ٝ‫ٔكبث‬ ٝ‫اِجت‬ ٚ ،‫قٛ٘س‬ْ‫٘ط‬ ‫ٞبی‬ٚ ‫لٛت‬ ٌ‫٘مب‬ ‫زاضای‬ ‫زیٍط‬ ‫افعاضی‬ .‫اؾت‬ ‫يؼفی‬ ٖ‫ػٙٛا‬ ‫ثب‬ ‫وتبة‬ ٗ‫ای‬"‫آقٙبیی‬‫ثب‬Node.js"ٕٝ‫تطخ‬ ً‫ب‬‫تمطیج‬‫اظ‬ ‫اؾت‬ ‫ای‬5‫وتبة‬ َٚ‫ا‬ ُ‫فه‬Node.js in Actionٖ‫فطاٚا‬ ‫تالـ‬ ٚ ‫ظیبز‬ ٖ‫ظٔب‬ ‫نطف‬ ‫اظ‬ ‫پؽ‬ ٝ‫و‬ ٜ‫آٔبز‬.‫قس‬ ‫ا٘تكبض‬ ‫ی‬ ٗ‫ای‬ ‫زض‬5ٝ‫اضائ‬ ٚ ‫ٚة‬ ِ‫ض‬ٚ‫ؾط‬ ‫یه‬ ٗ‫ؾبذت‬ ،‫٘ٛز‬ ‫ٔؼطفی‬ ُ‫لجی‬ ‫اظ‬ ‫ُٔبِجی‬ ُ‫فه‬ُ‫فبی‬ٜٛ‫٘ح‬ ،‫ایؿتب‬ ‫ٞبی‬‫ؾطٚیؽ‬ ‫یه‬ ٗ‫ؾبذت‬ ‫ی‬ِ‫ة‬ٚ ِRESTful‫ثط‬ ‫ثب‬ ‫آقٙبیی‬ ،‫ذی‬ َٚ‫ٔبغ‬ٝ‫ؾبذت‬ ‫ٞبی‬ٜ‫پبیٍب‬ ‫ثطذی‬ ‫اظ‬ ‫اَالػبتی‬ ،‫٘ٛز‬ ‫ثطای‬ ٜ‫قس‬ٜٛ‫٘ح‬ ٚ ٜ‫زاز‬ ‫ٞبی‬ٖ‫آ‬ ‫اظ‬ ٜ‫اؾتفبز‬ ‫ی‬َ‫ٔثب‬ ‫شوط‬ ‫ثب‬ ٜ‫ٕٞطا‬ ... ٚ ،‫٘ٛز‬ ‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬ ‫ٞب‬ٜ‫آٔس‬ ‫ٞبیی‬.‫ا٘س‬ ‫زیٍطی‬ ‫وتبة‬ ٓ‫زاقت‬ ‫ایٙتط٘ت‬ ‫فًبی‬ ‫زض‬ ٝ‫و‬ ‫خؿتدٛیی‬ ‫زض‬ ٜ‫ٍ٘بض٘س‬ٝ‫نفح‬ ‫تؼساز‬ ٗ‫ای‬ ‫ثب‬‫آٔٛظـ‬ ‫ٔٛضز‬ ‫زض‬node.js‫ظث‬ ٝ‫ث‬ٓ‫٘یبفت‬ ‫فبضؾی‬ ٖ‫ب‬ٚ ً‫ال‬‫احتٕب‬‫وتبة‬ ٗ‫ای‬‫زض‬ٚ ٗ‫اِٚی‬ ‫ا٘تكبض‬ ٖ‫ظٔب‬‫تٟٙب‬‫وتبة‬‫ثطای‬ ‫آٔٛظقی‬node.js‫فبضؾی‬ ٖ‫ظثب‬ ٝ‫ث‬‫اظ‬ ‫ثیف‬ ‫نفحبت‬ ‫تؼساز‬ ‫ثب‬100ٝ‫نفح‬.‫اؾت‬ ٝ‫و‬ ‫ثبقیس‬ ٝ‫زاقت‬ ٝ‫تٛخ‬ ٝ‫٘ىت‬ ٗ‫ای‬ ٝ‫ث‬ٝ‫٘ؿر‬ ‫ا٘تكبض‬ ٖ‫ظٔب‬ ‫اظ‬( ٖٛٙ‫او‬ ‫تب‬ ‫وتبة‬ ‫انّی‬ ٖ‫ظثب‬ ‫ی‬‫اضزیجٟكت‬94ٝ‫ٌصقت‬ ٓ‫٘ی‬ ٚ َ‫ؾب‬ ‫یه‬ ً‫ا‬‫حسٚز‬ )ٚ ‫اؾت‬ ٜ‫وطز‬ ‫تغییط‬ ٖ‫ظٔب‬ ٖ‫آ‬ ‫اظ‬ ُ‫ٔؿبئ‬ ‫ثطذی‬ ً‫ب‬‫َجؼ‬ٝ‫٘ؿر‬ ً‫ال‬‫(ٔث‬ ‫ا٘س‬ْ‫٘ط‬ ‫ی‬ٝ‫٘ؿر‬ ٚ ٜ‫اؾتفبز‬ ‫ٔٛضز‬ ‫افعاضٞبی‬.)‫٘ٛز‬ ‫ذٛز‬ ‫ی‬ ‫ٔی‬ ‫انّی‬ ٖ‫ظثب‬ ‫وتبة‬ ‫اظ‬ )‫اٍّ٘یؿی‬ ٖ‫ظثب‬ ٝ‫(ث‬ ‫ثیكتط‬ ‫ٔكرهبت‬ ٖ‫زیس‬ ‫ثطای‬ٝ‫ٔطاخؼ‬ ‫ظیط‬ ‫آزضؼ‬ ‫ٚ/یب‬ ٖٚ‫آٔبظ‬ ‫ؾبیت‬ ‫زض‬ ‫وتبة‬ ‫آزضؼ‬ ٝ‫ث‬ ‫تٛا٘یس‬ :‫ثفطٔبییس‬ http://www.manning.com/cantelon/ ٖ‫ضایٍب‬ ‫نٛضت‬ ٝ‫ث‬ ‫ظیط‬ ‫آزضؼ‬ ‫َطیك‬ ‫اظ‬ ‫حبيط‬ َ‫حب‬ ‫زض‬ ٓٞ ‫انّی‬ ٖ‫ظثب‬ ‫وتبة‬‫زؾتطؾ‬ ُ‫لبث‬‫ی‬:‫اؾت‬ http://www.ebooksworld.ir/post/index/99 ٖ‫ظثب‬ ‫ثب‬ ‫ذٛة‬ ‫آقٙبیی‬JavaScript‫پیف‬ ‫یه‬ٝ‫ُٔبِؼ‬ ‫ثطای‬ ‫اؾبؾی‬ ‫٘یبظ‬‫ثب‬ ‫آقٙبیی‬ ‫ٔمساضی‬ ٗ‫زاقت‬ .‫اؾت‬ ‫وتبة‬ ٗ‫ای‬ ‫ی‬HTML،CSSٚjQuery، ٚ‫وبٔپیٛتطی‬ ‫اَالػبت‬ ‫ثطذی‬ ٗ‫زاقت‬(‫ثب‬ ‫خعئی‬ ‫ذیّی‬ ٝ٘ ٚ ‫وّی‬ ‫آقٙبیی‬ ُ‫ٔث‬HTTP)‫٘یع‬ٜ‫ثٟط‬ ‫ثبػث‬‫ثٛز‬ ‫ذٛاٞٙس‬ ‫وتبة‬ ‫اظ‬ ‫ثیكتط‬ ‫ثطزاضی‬. ْ‫أیسٚاض‬‫اثط‬ ٗ‫ای‬‫زاضز‬ ٝ‫و‬ ‫اقىبالتی‬ ْ‫تٕب‬ ‫ثب‬.‫قٛز‬ ‫ٚالغ‬ ‫ٔفیس‬ ٖ‫ثطایتب‬ ‫ثتٛا٘س‬ ‫ٔی‬ ُ‫تٕبی‬ ‫نٛضت‬ ‫زض‬‫اِىتطٚ٘یىی‬ ‫پؿت‬ ٝ‫ث‬ ‫ضا‬ ‫ذٛز‬ ‫٘ظطات‬ ‫تٛا٘یس‬soryani@chmail.ir.‫فطٔبییس‬ َ‫اضؾب‬ ‫اضزیجٟكت‬94
  • 7. 1 ‫بخص‬7 ‫ًَد‬ ‫هباًی‬7 ‫یبزٌی‬ ٖ‫ظٔب‬ ‫زض‬‫یب‬ ‫٘ٛیؿی‬ ٝٔ‫ثط٘ب‬ ٖ‫ظثب‬ ‫یه‬ ‫طی‬‫یه‬ٓ‫فطی‬‫ٚضن‬2 ‫ٔی‬ ٚ‫ضٚثط‬ ‫خسیسی‬ ٓ‫ٔفبٞی‬ ‫ثب‬ ‫اغّت‬ ،‫اظ‬ ‫خسیسی‬ ‫٘ٛع‬ ٝ‫ث‬ ْ‫ّٔع‬ ‫ضا‬ ‫قٕب‬ ٝ‫و‬ ‫قٛیس‬ٝ‫ث‬ ٖ‫وطز‬ ‫فىط‬ .‫وٙس‬ ‫ٔی‬ ُ‫ٔؿبئ‬‫٘ٛز‬‫ٔؿتثٙب‬ ٜ‫لبئس‬ ٗ‫ای‬ ‫اظ‬ٖ‫چٙب‬ ،‫٘یؿت‬‫خسیسی‬ ‫ضٞیبفت‬ ٝ‫و‬ٝ‫تٛؾؼ‬ ٜٛ‫ٚخ‬ ‫اظ‬ ‫ثطذی‬ ‫ثطای‬‫ی‬ْ‫٘ط‬.‫زاضز‬ ‫وبضثطزی‬ ‫افعاضٞبی‬ ٝ‫ایٙى‬ ‫ٔٛضز‬ ‫زض‬ ‫وتبة‬ ٗ‫ای‬ ‫اظ‬ ‫ثرف‬ ٗ‫اِٚی‬‫٘ٛز‬ً‫ب‬‫زلیم‬‫ثب‬ ‫تفبٚتی‬ ٝ‫چ‬‫پّت‬ْ‫فط‬3 ‫ٞبی‬ٖ‫آ‬ ‫اؾبؼ‬ ‫(ثط‬‫ٚیىی‬ ‫زض‬ ٝ‫چ‬‫اؾت‬ ٜ‫آٔس‬ ‫پیسیب‬،،‫وبٔپیٛتطی‬ ْ‫پّتفط‬ ‫یه‬‫وّی‬ ‫زض‬ٗ‫تطی‬ ،‫حبِت‬ٍ‫ٔحی‬ ‫یه‬ٜ‫آٔبز‬ٝ‫و‬ ‫اؾت‬ْ‫٘ط‬ ‫اظ‬ ٝ‫تى‬ ‫یه‬ٖ‫آ‬ ‫أىب٘بت‬ ‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬ ٚ ٍ‫ٔحی‬ ٖ‫آ‬ ‫لٛاػس‬ ‫اظ‬ ‫پیطٚی‬ ‫ثب‬ ‫افعاض‬،‫ٔی‬ ‫اخطا‬ ٖ‫آ‬ ‫زض‬‫قٛز‬.)‫تٛيیح‬ ‫زاضز‬ ‫زیٍط‬ ‫ٔی‬ٚ ‫زٞس‬‫ٔی‬ ٓ‫تؼّی‬ ‫آ٘طا‬ ‫اظ‬ ٜ‫اؾتفبز‬ َٛ‫ان‬ ٗ‫ٕٞچٙی‬ٝٔ‫ثط٘ب‬ ٝ‫و‬ ‫آٔٛذت‬ ‫ذٛاٞیس‬ ‫قٕب‬ .‫زٞس‬‫تِٛیس‬ ‫وبضثطزی‬ ‫ٞبی‬‫زض‬ ٜ‫قس‬‫٘ٛز‬،‫زاض٘س‬ ‫قىّی‬ ٝ‫چ‬ٍٝ٘ٛ‫چ‬ ٖ‫ؾبظٔب‬‫زٞی‬‫ٔی‬‫قٛ٘س‬،‫چبِف‬ ‫ثب‬ ‫ثبیس‬ ٍٝ٘ٛ‫چ‬ ٚٝ‫ث‬ ‫ٔرتم‬ ‫ٞبی‬‫٘ٛز‬‫ثرف‬ ‫زض‬ ٝ‫آ٘چ‬ .‫قس‬ ٝ‫ٔٛاخ‬1ٕ‫ق‬ ٝ‫ث‬ ‫ٌطفت‬ ‫ذٛاٞیس‬ ‫یبز‬‫یبزٌیطی‬ ‫ثطای‬ ‫٘یبظ‬ ‫ٔٛضز‬ ‫ٔجب٘ی‬ ‫ب‬ ٜٛ‫٘ح‬‫ی‬ٝٔ‫ثط٘ب‬ ‫تِٛیس‬‫تحت‬ ‫وبضثطزی‬ ‫ٞبی‬‫زض‬ ‫ٚة‬node‫ثرف‬ ‫زض‬ ٝ‫(و‬2‫پطزاذت‬ ٓ‫ذٛاٞی‬ ‫ثیكتط‬ ٖ‫آ‬ ٝ‫ث‬،).‫زاز‬ ‫ذٛاٞس‬ ‫ضا‬ 1 node 2 framework 3 platform
  • 8. 2
  • 9. 3 ‫فصل‬7 ِ‫ب‬Node.js‫آهذیذ‬ ‫خَش‬ ‫هی‬ ‫پَضص‬ ‫فصل‬ ‫ایي‬ ِ‫ک‬ ‫هطالبی‬‫دّذ‬ Node.js‫چیؿت‬ ‫خبٚااؾىطیپت‬‫ؾطٚض‬ ‫ضٚی‬ ٖٚ‫آؾٙىط‬ ‫َجیؼت‬1 ‫ضذسازٔحٛض‬ ٚ2 ‫٘ٛز‬ ٌٝ٘ٛٝٔ‫ثط٘ب‬ ‫اظ‬ ‫ٞبیی‬ٖ‫آ‬ ‫ثطای‬ ‫٘ٛز‬ ٝ‫و‬ ‫ٞب‬‫اؾت‬ ٜ‫قس‬ ‫َطاحی‬ ‫ٞب‬ ٝٔ‫ثط٘ب‬ٕٝ٘ٛ٘ ‫ٞبی‬ ٗ‫ای‬ ‫حبال‬‫٘ٛز‬ٓٞ ‫قبیس‬ .‫ثبقیس‬ ٜ‫قٙیس‬ ‫ضا‬ ‫اؾٕف‬ ٝ‫و‬ ‫زاضز‬ َ‫احتٕب‬ ‫چیؿت؟‬ٖٛٙ‫او‬‫ٔی‬ ٜ‫اؾتفبز‬ ٖ‫آ‬ ‫اظ‬‫اظ‬ ٝ‫ِحظ‬ ٗ‫ای‬ ‫زض‬ .‫ٞؿتیس‬ ٚ‫وٙدىب‬ ٖ‫آ‬ ‫ٔٛضز‬ ‫زض‬ ‫قبیس‬ ‫یب‬ .‫وٙیس‬ ٖ‫ظٔب‬)‫انّی‬ ٖ‫ظثب‬ ‫وتبة‬ ‫ٍ٘بضـ‬ ٖ‫(ظٔب‬،‫٘ٛز‬َ‫ؾب‬ ‫زض‬ ‫(ظٟٛضـ‬ ‫اؾت‬ ٖ‫خٛا‬ ٚ ‫ٔحجٛة‬ ‫ثؿیبض‬2009ٜ‫ثٛز‬ ‫ٔیالزی‬‫اؾت‬.)ٜ‫ضز‬ ‫زاضای‬ْٚ‫ز‬ ‫ی‬ٗ‫ثیكتطی‬ ‫زض‬ ٜ‫ٔكبٞس‬ٜ‫قس‬‫ٞب‬‫زض‬ٜ‫پطٚغ‬‫ٞب‬‫ی‬github( ‫اؾت‬https://github.com/joyent/node)ٖ‫آ‬ ٝ‫ث‬ ٌٛ‫ٔطث‬ ٌٌُٛ ٜٚ‫ٌط‬ ‫زض‬ ، (http://groups.google.com/group/nodejs)َ‫وب٘ب‬ ‫زض‬ ‫٘یع‬ ٚIRCَٛ‫ٔطث‬ٝ‫ا‬‫ـ‬ (http://webchat.freenode.net/?channels=node.js)ٝ‫ث‬ُ‫لبث‬ ‫ٔمساض‬‫ٔی‬ َ‫ز٘جب‬ ‫تٛخٟی‬‫اظ‬ ‫ثیف‬ ٚ ،‫قٛز‬15000َِٚ‫ٔبغ‬‫تِٛیس‬ٍ‫تٛؾ‬ ٜ‫قس‬ ٝ‫خبٔؼ‬‫ی‬ٝ‫تٛؾؼ‬‫زٞٙسٌب٘ف‬‫زض‬npm( ‫زاضز‬npm‫ٔسیطیت‬ٜ‫وٙٙس‬‫ی‬‫زض‬ ٝ‫ثؿت‬‫اؾت‬ ‫٘ٛز‬–http://npmjs.org.)‫اٚنبف‬ ٗ‫ای‬ ‫ثب‬ٝ٘‫پكتٛا‬ُ‫لبث‬ ‫ی‬‫تٛخٟی‬ ٗ‫ای‬ ‫ٔٛفمیت‬ ‫ثطای‬ْ‫پّتفط‬‫پؽ‬ ‫زض‬.‫زاضز‬ ‫لطاض‬ ٖ‫آ‬ ‫ضؾٕی‬ ‫ؾبیت‬‫٘ٛز‬(http://www.nodejs.org)ٝ‫ث‬ ‫ضا‬ ٖ‫آ‬ٗ‫ای‬‫ٔی‬ ‫تؼطیف‬ ‫نٛضت‬:‫وٙس‬"‫ثٙب‬ ‫پّتفطٔی‬‫ثط‬ ٜ‫قس‬ِ‫ت‬‫خبٚااؾىطیپ‬ ‫ٔٛتٛض‬3 ْٚ‫وط‬(Chrome’s JavaScript runtime)‫ث‬ٝٔ‫ثط٘ب‬ ٖ‫آؾب‬ ‫ؾبذت‬ ‫طای‬‫ٞبی‬‫تحت‬ٝ‫قجى‬4 ‫ی‬‫ٔمیبؼ‬ ٚ ‫ؾطیغ‬.‫پصیط‬node.jsَ‫ٔس‬ ‫یه‬ ‫اظ‬I/O‫ضذسازٔحٛض‬ٜٚ‫غیطٔؿسٚزوٙٙس‬5 ٖ‫آ‬ ٝ‫و‬ ‫وٙس‬ ‫ٔی‬ ٜ‫اؾتفبز‬‫ؾجه‬ ‫ضا‬‫وبثطزی‬ ‫ٞبی‬ ٝٔ‫ثط٘ب‬ ‫ثطای‬ ‫ػبِی‬ ٚ ،‫وبضا‬ ٚ ٖ‫ٚظ‬ًِ٘‫ثالزض‬6 ٜ‫زاز‬‫ٔتٕطوع‬7 ‫ضٚی‬ ٝ‫و‬ّٝ‫ٚؾی‬‫ٞبی‬‫تٛظیغ‬‫ٔی‬ ‫اخطا‬ ٜ‫قس‬‫ٔی‬ ‫قٛ٘س‬.‫وٙس‬" :‫زاقت‬ ٓ‫ذٛاٞی‬ ‫ٍ٘بٞی‬ ‫ظیط‬ ٓ‫ٔفبٞی‬ ٝ‫ث‬ ،ُ‫فه‬ ٗ‫ای‬ ‫زض‬ ‫إٞیت‬ ‫ػّت‬‫خبٚااؾىطیپت‬‫زض‬ٝ‫تٛؾؼ‬‫ؾطٚض‬ ‫ؾٕت‬ ‫ی‬ ‫.چٍٍٛ٘ی‬ٝ‫ث‬ ‫ضؾیسٌی‬I/O‫ٔطٚضٌط‬ ٍ‫تٛؾ‬‫ثب‬ٜ‫اؾتفبز‬‫اظ‬‫خبٚااؾىطیپت‬ ‫چٍٍٛ٘ی‬ٝ‫ث‬ ‫ضؾیسٌی‬I/Oٍ‫تٛؾ‬‫٘ٛز‬‫ؾطٚض‬ ‫ضٚی‬ ٝٔ‫ثط٘ب‬ ‫اظ‬ ‫ٔٙظٛض‬‫وبضثطزی‬ ‫ٞبی‬DIRTyٖ‫آ‬ ‫ذٛة‬ ‫تٙبؾت‬ ‫ػّت‬ ٚ ،‫ثب‬ ‫ٞب‬‫٘ٛز‬ 1 asynchronous 2 evented, event-driven 3 javascript 4 network applications 5 non-blocking 6 real-time 7 data-intensive
  • 10. 4 ‫چٙس‬ٝ‫پبی‬ َ‫ٔثب‬ ‫ؾٕت‬ ٝ‫ث‬ ‫ضا‬ ٖ‫تٛخٟٕب‬ ‫اثتسا‬‫خبٚااؾىطیپت‬...ٓ‫ثجطی‬ 7.7‫بٌا‬‫بر‬ ُ‫ضذ‬‫جاٍااسکریپت‬ ‫خبٚااؾىطیپت‬‫یىی‬‫اظ‬‫ٔحجٛة‬ٗ‫تطی‬ٖ‫ظثب‬‫ٞبی‬ٝٔ‫ثط٘ب‬.‫اؾت‬ ٖ‫خٟب‬ ‫٘ٛیؿی‬ٝٔ‫ثط٘ب‬ ٖٛٙ‫تبو‬ ‫اٌط‬‫٘ٛیؿی‬‫اختٙبة‬ ،‫ثبقیس‬ ٜ‫زاز‬ ْ‫ا٘دب‬ ‫ٚة‬ ‫ثطای‬ ‫ای‬.‫اؾت‬ ‫٘بپصیط‬ ‫خبٚااؾىطیپت‬‫ؾجت‬ ٝ‫ث‬ ،‫٘فٛش‬‫ثبالی‬‫ضٚیبی‬ ،‫ٚة‬"ٕٝٞ ،‫ثٙٛیؽ‬ ‫یىجبض‬ٗ‫و‬ ‫اخطا‬ ‫خب‬"ٝ‫و‬ ‫ضا‬Java‫زض‬ ٚ ٝ‫ٌصقت‬ ‫زض‬ٝٞ‫ز‬‫ی‬1990‫ٔیالزی‬ٜ‫ثطآٚضز‬ ‫زاقت‬ .‫اؾت‬ ٜ‫وطز‬ ‫ا٘مالة‬ ٖ‫ظٔب‬ ‫حٛاِی‬ ‫زض‬AJAX‫زض‬2005،‫خبٚااؾىطیپت‬‫تؼجیطی‬ ٝ‫ث‬ ٚ ‫اثتسایی‬ ٖ‫ظثب‬ ‫یه‬ ‫اظ‬"‫اؾجبة‬‫ثبظی‬"ٝٔ‫ثط٘ب‬ ٖ‫آ‬ ‫ثب‬ ٝ‫و‬ ‫قس‬ ‫ظثب٘ی‬ ٝ‫ث‬ ُ‫تجسی‬‫ٞبی‬ ‫ٔی‬ ‫خسی‬ ٚ ‫حمیمی‬‫٘ٛقتٙس‬ٝٔ‫ثط٘ب‬ ٗ‫اِٚی‬ ‫اظ‬ ‫ثطذی‬ .‫شوط‬ ُ‫لبث‬ ‫ٞبی‬Google MapsٚGmailٝٔ‫ثط٘ب‬ ‫اظ‬ ‫فطاٚا٘ی‬ ‫تؼساز‬ ٖٛٙ‫او‬ ‫أب‬ ،‫ثٛز٘س‬‫ٞبی‬ ‫تحت‬‫اظ‬ ،‫ٞؿتٙس‬ ‫ٚة‬Twitter‫تب‬ ٝ‫ٌطفت‬Facebook‫تب‬GitHub. ٝ‫اضائ‬ ٖ‫ظٔب‬ ‫اظ‬‫ی‬ْٚ‫وط‬ ٌٌُٛ‫اٚاذط‬ ‫زض‬2008،‫وبضایی‬1 ‫خبٚااؾىطیپت‬‫قطوت‬ ٗ‫ثی‬ ٗ‫ؾٍٙی‬ ‫ضلبثت‬ ‫ػّت‬ ٝ‫ث‬ٝ‫ػطي‬ ‫ٞبی‬،‫(ٔٛظیال‬ ‫ٔطٚضٌط‬ ٜ‫وٙٙس‬ ‫٘طذ‬ ‫ثب‬ )ٌٌُٛ ٚ ،‫ُپطا‬‫ا‬ ،ُ‫َپ‬‫ا‬ ،‫ٔبیىطٚؾبفت‬‫ی‬.‫اؾت‬ ٝ‫یبفت‬ ‫ثٟجٛز‬ ‫ثبٚض٘ىط٘ی‬ ٚ ‫ؾطیغ‬‫وبضایی‬ٗ‫ٔبقی‬ ٗ‫ای‬ِ‫ی‬‫ٔدبظ‬ ‫ٞبی‬‫خبٚااؾىطیپت‬(‫ٔدبظی‬ ٗ‫ٔبقی‬ ‫خبٚااؾىطیپت‬ْ‫٘ط‬ ‫یه‬‫افعاض‬ٖ‫آ‬ ٚ ُ‫تجسی‬ ٗ‫ٔبقی‬ ٖ‫ظثب‬ ٝ‫ث‬ ‫ضا‬ ‫خبٚااؾىطیپت‬ ‫وس‬ ٝ‫و‬ ‫اؾت‬‫ٔی‬ ‫اخطا‬ ‫ضا‬‫وٙس‬-ِ‫ح‬‫تٛيی‬ُٝ‫حی‬ ‫اظ‬ ‫ٔدبظی‬ ٗ‫ٔبقی‬ ْٟٛ‫ٔف‬ٗ‫ای‬ ‫ی‬ ‫٘یؿت‬ ٖ‫آ‬ ٝ‫ث‬ ‫٘یبظی‬ ‫وتبة‬ ٗ‫ای‬ ‫اظ‬ ٜ‫اؾتفبز‬ ‫ثطای‬ ٚ ‫اؾت‬ ‫ذبضج‬ ‫وتبة‬)ً‫ب‬‫حمیمت‬ٝٔ‫ثط٘ب‬ ‫٘ٛع‬ ٖ‫زاز‬ ‫تغییط‬ َ‫حب‬ ‫زض‬‫وبضثطزی‬ ‫ٞبی‬‫ٔی‬ ٝ‫و‬ ‫ای‬‫ٚة‬ ‫ضٚی‬ ‫تٛا٘یس‬ .‫ٞؿتٙس‬ ‫وٙیس‬ ‫تِٛیس‬‫یه‬َ‫ٔثب‬ً‫ب‬‫حمیمت‬ ٚ ،ٝ‫تٛخ‬ ُ‫لبث‬ ‫ثؿیبض‬ٜ‫ذیط‬‫ٔٛيٛع‬ ٗ‫ای‬ ‫اظ‬ ٜ‫وٙٙس‬jslinux‫اؾت‬(http://bellard.org/jslinux/)‫؛‬‫یه‬ ٝ‫قجی‬‫قرهی‬ ‫وبٔپیٛتط‬ ‫ؾبظ‬،ٝ‫٘ٛقت‬ٜ‫قس‬ٖ‫ظثب‬ ‫ثب‬‫خبٚااؾىطیپت‬،ٝ‫و‬‫ٔی‬‫تٛا٘یس‬ٝ‫ٞؿت‬ ‫یه‬‫ثبضٌص‬ ٖ‫آ‬ ‫ضٚی‬ ‫ضا‬ ‫ِیٙٛوؽ‬ ‫ی‬‫ثب‬ ،‫وٙیس‬ ‫اضی‬ٝ٘‫پبیب‬ ‫٘كؿت‬2 ُٔ‫تؼب‬ ٝٔ‫ثط٘ب‬ ‫یه‬ ٚ ،‫وٙیس‬‫ی‬Cٕٝٞ ٚ ،‫وٙیس‬ ُ‫وبٔپبی‬ ‫ضا‬ٗ‫ای‬ ‫ی‬‫ٔی‬ ‫اتفبق‬ ‫قٕب‬ ‫ٔطٚضٌط‬ ٖٚ‫زض‬ ‫زض‬ ‫ٞب‬.‫افتس‬ ٝٔ‫ثط٘ب‬ ‫ثطای‬ ‫٘ٛز‬‫اظ‬ ‫ؾطٚض‬ ‫ؾٕت‬ ‫٘ٛیؿی‬V8‫ٔدبظی‬ ٗ‫ٔبقی‬ ،‫لسضت‬ ْٚ‫وط‬ ٌٌُٛ ٝ‫و‬ ‫ای‬‫ٔی‬ ٜ‫اؾتفبز‬ ،‫اؾت‬ ٖ‫آ‬ ‫اظ‬ ٝ‫ٌطفت‬.‫وٙس‬V8‫وبضایی‬ً‫ا‬‫قسیس‬ ‫ضا‬ ‫٘ٛز‬ ‫اضتمبء‬‫ٔی‬ٝ‫و‬ ‫چطا‬ ،‫زٞس‬ُٝ‫ٚاؾ‬‫حصف‬ ‫ضا‬،‫وس‬ ٝ‫ث‬ ٓ‫ٔؿتمی‬ ُ‫وبٔپبی‬ ٚ‫ٔبزضی‬ٗ‫ٔبقی‬3 ‫ثبیت‬ ‫اخطای‬ ‫ثط‬ ‫ضا‬‫وس‬4 ‫ٔفؿط‬ ‫اظ‬ ٜ‫اؾتفبز‬ ‫یب‬5 ‫ٔی‬ ‫تطخیح‬‫ػّت‬ ٝ‫ث‬ .‫زٞس‬ ٜ‫اؾتفبز‬‫٘ٛز‬ ‫ی‬:‫اؾت‬ ٓٞ‫فطا‬ ‫٘یع‬ ‫زیٍطی‬ ‫ٔعایبی‬ ،‫ؾطٚض‬ ‫ؾٕت‬ ‫زض‬ ‫خبٚااؾىطیپت‬ ‫اظ‬ ٝ‫تٛؾؼ‬ٔ ٖ‫زٞٙسٌب‬‫ی‬ٝٔ‫ثط٘ب‬ ‫تٛا٘ٙس‬‫تحت‬ ‫وبضثطزی‬ ‫ٞبی‬‫وبٞف‬ ‫َطیك‬ ‫اظ‬ ٝ‫و‬ ،‫ثٙٛیؿٙس‬ ٖ‫ظثب‬ ‫یه‬ ‫ثب‬ ‫ضا‬ ‫ٚة‬ِ‫ى‬‫تؼٛی‬ٝٙ‫ظٔی‬ٝ‫تٛؾؼ‬ ٗ‫ثی‬ٚ ‫والیٙت‬ ‫ی‬ ٝ‫تٛؾؼ‬‫ی‬‫اقتطان‬ ٝ‫ث‬ ٖ‫أىب‬ ٚ ،‫ؾطٚض‬‫ؾطٚض‬ ٚ ‫والیٙت‬ ٗ‫ثی‬ ‫وس‬ ‫ٌعاضی‬ٜ‫اؾتفبز‬ ُ‫(ٔث‬‫ثطای‬ ٖ‫یىؿب‬ ‫وس‬ ‫اظ‬ ‫ٔدسز‬ ‫ی‬‫اػتجبضؾٙدی‬ْ‫فط‬ ‫ٚضٚزی‬‫ٞب‬ ِ‫ك‬ُٙٔ ‫یب‬6 ‫وٕه‬ ،)‫ثبظی‬.‫اؾت‬ ٜ‫وٙٙس‬ JSON‫ٔحجٛة‬ ‫ثؿیبض‬ ‫فطٔت‬ ‫یه‬ ٜ‫أطٚظ‬ٚ ‫اؾت‬ ٜ‫زاز‬ َ‫تجبز‬ ‫ثطای‬‫فطٔت‬ ٗ‫ای‬‫خبٚااؾىطیپت‬ ‫زض‬‫خعئی‬ٖ‫ظثب‬ ‫ذٛز‬ ‫اظ‬.‫اؾت‬ ٜ‫پبیٍب‬ ‫زض‬ ٜ‫اؾتفبز‬ ‫ٔٛضز‬ ٖ‫ظثب‬ ‫خبٚااؾىطیپت‬ٜ‫زاز‬‫ٞبی‬NoSQL‫ٌٛ٘بٌٛ٘ی‬‫اؾت‬ُ‫(ٔث‬CouchDBٚMongoDBٗ‫ثٙبثطای‬ ،)ٟٝ‫ٔٛاخ‬ ٖ‫آ‬ ‫ثب‬‫ٞب‬‫اؾت‬ ‫َجیؼی‬ ‫تٙبؾت‬ ‫زاضای‬(َ‫ٔثب‬ ‫ثطای‬،‫پطؼ‬ ٖ‫ظثب‬ٚٛ‫خ‬7 ِٚ‫ق‬ُِ8 MongoDBٗ‫ٕٞچٙی‬ ‫؛‬map/reduce‫زض‬CouchDB، 1 performance 2 terminal session 3 native machine code 4 bytecode 5 interpreter 6 logic 7 query 8 shell
  • 11. 5 ‫ٞؿتٙس‬ ‫خبٚااؾىطیپت‬). ‫یه‬ ‫خبٚااؾىطیپت‬ِ‫ف‬‫ٞس‬ُ‫وبٔپبی‬ٖ‫ظثب‬ ‫اظ‬ ‫تؼسازی‬ ٚ ،‫اؾت‬‫ٔی‬ ُ‫وبٔپبی‬ ٖ‫آ‬ ٝ‫ث‬ ٝ‫و‬ ‫ٞؿتٙس‬ ‫حبظط‬ َ‫حب‬ ‫زض‬ ‫ٞب‬.‫قٛ٘س‬ ‫(ٔی‬ٝ‫ث‬ ‫تٛا٘یس‬"‫فٟطؾت‬ٖ‫ظثب‬ٝ‫ث‬ ٝ‫و‬ ‫ٞبیی‬JS‫ٔی‬ ُ‫وبٔپبی‬‫قٛ٘س‬"‫آزضؼ‬ ٗ‫ای‬ ‫زض‬:‫وٙیس‬ ٝ‫ٔطاخؼ‬ https://github.com/jashkenas/coffe-script/wiki/List-of-languages-that-compile-to-JS) ‫ٔی‬ ٜ‫اؾتفبز‬ ‫ٔدبظی‬ ٗ‫ٔبقی‬ ‫یه‬ ‫اظ‬ ‫٘ٛز‬‫وٙس‬(V8)‫ثب‬ ‫ضا‬ ‫ذٛز‬ ٝ‫و‬‫اؾتب٘ساضز‬ECMAScript‫ُٔٙجك‬‫ٔی‬‫وٙس‬.ٝ‫و‬ ‫٘یؿتیس‬ ‫ٔدجٛض‬ ،‫زیٍط‬ ٖ‫ظثب‬ ٝ‫ث‬ ‫اظ‬ ٜ‫اؾتفبز‬ ٖ‫أىب‬ ‫تب‬ ‫وٙٙس‬ ‫ضٚظ‬ ٝ‫ث‬ ‫ضا‬ ‫ذٛز‬ ‫ٔطٚضٌطٞب‬ ْ‫تٕب‬ ‫تب‬ ‫وٙیس‬ ‫نجط‬‫ٚیػٌی‬‫خبٚااؾىطیپت‬ ٖ‫ظثب‬ ‫خسیس‬ ‫ٞبی‬.‫ثبقیس‬ ٝ‫زاقت‬ ‫٘ٛز‬ ‫زض‬ ‫ضا‬ ٝ‫٘ؿر‬ ،ٖ‫ظٔب‬ ‫اظ‬ ٝ‫ِحظ‬ ٗ‫ای‬ ‫زض‬ ٝ‫اِجت‬ :ٜ‫(ٍ٘بض٘س‬ٝ‫٘ؿر‬ ٗ‫آذطی‬ ‫اظ‬ ‫٘ٛز‬ ‫فؼّی‬ ‫ی‬‫ی‬v8‫ٕ٘ی‬ ٜ‫اؾتفبز‬)‫وٙس‬ (‫اؾتب٘ساضز‬ ‫ٔٛضز‬ ‫زض‬ ‫ثیكتط‬ ‫اَالػبت‬ ‫ثطای‬ECMAScript،‫ٔی‬‫تٛا٘یس‬‫وٙیس‬ ٝ‫ٔطاخؼ‬:ٝ‫ث‬ http://en.wikipedia.org/wiki/ECMAScript) ‫ٔی‬ ‫وؿی‬ ٝ‫چ‬‫خبٚا‬ ٝ‫و‬ ‫زا٘ؿت‬‫اؾىطیپت‬‫ظثب٘ی‬‫خصاة‬‫خبِت‬ ٚٝٔ‫ثط٘ب‬ ٗ‫٘ٛقت‬ ‫ثطای‬‫ٞبی‬‫ثكٛز‬ ‫ؾطٚض‬ ‫ؾٕت‬‫؟‬‫اؾبؼ‬ ‫ثط‬،‫٘فٛش‬‫وبضایی‬ٝ‫ثمی‬ ٚ ،‫ی‬ ُ‫لج‬ ٝ‫و‬ ‫ذهٛنیبتی‬‫شوط‬ ‫تط‬‫اظ‬ ‫ظیبزی‬ ٖ‫ٔیعا‬ ‫٘ٛز‬ ،‫قس‬ٝ٘‫پكتٛا‬‫ٔٛفمیت‬ ‫ثطای‬‫ضا‬.‫اؾت‬ ٜ‫آٚضز‬ ‫ثسؾت‬‫یه‬ ‫تٟٙب‬ ‫خبٚااؾىطیپت‬ ٝ‫و‬ ‫زاقت‬ ٝ‫تٛخ‬ ‫ثبیس‬ ٝ‫اٌطچ‬ ٜٛ‫قی‬ .‫اؾت‬ َ‫پبظ‬ ‫اظ‬ ٝ‫لُؼ‬‫ٔی‬ ٜ‫اؾتفبز‬ ‫خبٚااؾىطیپت‬ ‫اظ‬ ‫٘ٛز‬ ٝ‫و‬ ‫ای‬‫حتی‬ ‫وٙس‬‫خبِت‬‫ؾطاؽ‬ ٝ‫ث‬ ،‫٘ٛز‬ ٍ‫ٔحی‬ ‫زضن‬ ‫ثطای‬ .‫اؾت‬ ‫تط‬‫یه‬ٍ‫ٔحی‬ٝ‫ث‬ ٌٛ‫ٔطث‬ ‫خبٚااؾىطیپت‬‫ٔی‬.‫ٔطٚضٌط‬ :‫زاضیس‬ ‫آقٙبیی‬ ٖ‫آ‬ ‫ثب‬ ٕٝٞ ‫اظ‬ ‫ثیف‬ ٝ‫و‬ ٓ‫ضٚی‬ 7.2ٍ ‫آسٌکرٍى‬‫رخذادهحَر‬‫هرٍرگر‬ : ٚ ٖٚ‫آؾٙىط‬ ْ‫پّتفط‬ ‫یه‬ ‫٘ٛز‬‫ضذساز‬‫ٔحٛض‬ِ‫ت‬‫خبٚااؾىطیپ‬ ‫ثطای‬‫ٔی‬ ٓٞ‫فطا‬ ‫ؾطٚض‬ ‫ؾٕت‬‫ث‬ ٝ‫ٔكبث‬ ‫ثؿیبض‬ .‫وٙس‬‫ب‬ٛ‫٘ح‬ٜ‫ای‬‫ی‬‫زض‬ ‫ضا‬ ‫خبٚااؾىطیپت‬ ‫ٔطٚضٌط‬ ٝ‫و‬ ‫ٔی‬ ٓٞ‫فطا‬ ‫والیٙت‬،‫آٚضز‬‫٘ٛز‬ٖ‫آ‬ٓٞ‫فطا‬ ‫ؾطٚض‬ ‫زض‬ ‫ضا‬‫ٔی‬.‫آٚضز‬ٗ‫ای‬ ‫زضن‬‫ٔی‬ ‫وبض‬ ٍٝ٘ٛ‫چ‬ ‫ٔطٚضٌط‬ ٝ‫و‬ٗ‫ای‬ ‫زضن‬ ‫ثطای‬ ،‫وٙس‬‫ٔی‬ ‫وبض‬ ٍٝ٘ٛ‫چ‬ ‫٘ٛز‬ ٝ‫و‬ٟٓٔ ‫وٙس‬ ٚ‫ز‬ ‫ٞط‬ .‫اؾت‬‫ضذسازٔحٛض‬‫ٞؿتٙس‬‫(اظ‬‫یه‬ٝ‫حّم‬‫ی‬‫ضذساز‬‫ٔی‬ ٜ‫اؾتفبز‬)‫وٙٙس‬،ٚٝ‫ث‬ ‫ضؾیسٌی‬ ٖ‫ظٔب‬ ‫زض‬I/O،‫ٔؿسٚز‬ ‫غیط‬‫(اظ‬ ‫ٞؿتٙس‬ ٜ‫وٙٙس‬I/Oٖٚ‫آؾٙىط‬ ‫ٔی‬ ٜ‫اؾتفبز‬)‫وٙٙس‬.ٔ ‫یه‬ ٝ‫ث‬ ‫ُّٔت‬ ‫تٛيیح‬ ‫ثطای‬‫ٔی‬ ٜ‫ٍ٘ب‬ َ‫ثب‬.ٓ‫وٙی‬ ِ‫حلق‬‫ّای‬‫رخذاد‬ٍI/O‫آسٌکرٍى‬ٝ‫ُٔبِؼ‬ ‫ثطای‬ٝ‫حّم‬ ‫ٔٛضز‬ ‫زض‬ ‫ثیكتط‬ ‫ُٔبِت‬ ‫ی‬‫ٞبی‬‫ضذساز‬ٚI/O‫زض‬ َٝٛ‫ٔطث‬ ‫ٔمبالت‬ ٝ‫ث‬ ،ٖٚ‫آؾٙىط‬ Wikipedia‫آزضؼ‬ ‫زض‬‫ٞبی‬http:// en.wikipedia.org/wiki/Event_loopٚhttp:// en.wikipedia.org/wiki/Asynchronous_I/O.‫وٙیس‬ ٝ‫ٔطاخؼ‬ ٝ‫لُؼ‬ ٗ‫ای‬ٜ‫وٛتب‬ ‫وس‬ْٛ‫ٔطؾ‬‫زض‬jQuery‫ضا‬‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬ ٝ‫و‬XMLHttp-Request(XHR)‫زضذٛاؾت‬ ‫یه‬AJAX‫ٔی‬ ‫اخطا‬ ‫ضا‬‫وٙس‬‫زض‬‫٘ظط‬ ‫ثٍیطیس‬: ٝٔ‫ثط٘ب‬ ٗ‫ای‬ِ‫ت‬‫زضذٛاؾ‬ ‫یه‬HTTP‫ثطای‬resource.json‫ٔی‬ ‫اخطا‬ ‫ضا‬،‫پبؾد‬ ‫ثبظٌكت‬ ‫اظ‬ ‫پؽ‬ .‫وٙس‬ْ‫٘ب‬ ٖٚ‫ثس‬ ‫تبثؼی‬ٍ‫قطای‬ ٗ‫ای‬ ‫(زض‬"َ‫وب‬‫ثه‬"1 ‫ٔی‬ ٜ‫ذٛا٘س‬)‫قٛز‬‫ٔی‬ ‫فطاذٛا٘ی‬‫قٛز‬ْ‫٘ب‬ ‫ثب‬ ‫آضٌٛٔب٘ی‬ ‫زاضای‬ ٝ‫و‬dataٜ‫زاز‬ ٝ‫و‬ ،‫اؾت‬‫زضیبفت‬ ‫ی‬.‫اؾت‬ ‫زضذٛاؾت‬ ‫خٛاة‬ ‫زض‬ ٜ‫قس‬ ٝ‫ث‬ ‫وس‬ ٝ‫و‬ ‫وٙیس‬ ٝ‫تٛخ‬‫قىّی‬ ٗ‫چٙی‬:‫٘كس‬ ٝ‫٘ٛقت‬ 1 callback
  • 12. 12 ‫یه‬"ِ‫ض‬ٚ‫ؾط‬ِ‫ة‬ٚ"1 ً‫ب‬‫انُالح‬Hello World(‫ٌبٞی‬ ٝ‫و‬ ‫انُالحی‬‫آٔٛظقی‬ ٖٛ‫ٔت‬ ‫زض‬ٝٔ‫ثط٘ب‬ ‫ثطای‬ٜ‫اؾتفبز‬ ‫اؾت‬ ٜ‫ؾبز‬ ‫ثؿیبض‬ ٝ‫و‬ َٚ‫ا‬ ‫ی‬ ‫ٔی‬‫ػجبضت‬ )ٝ‫ٕٞیك‬ ‫(یب‬ ‫اغّت‬ ٚ ‫قٛز‬hello wordٝ‫ث‬ ‫ضا‬‫ٔی‬ ‫ذطٚخی‬ ٖ‫ػٙٛا‬‫زٞس‬) ٖ‫خطیب‬ ‫اظ‬ ‫ٔثبِی‬‫ٞب‬2 ‫ٔی‬ ‫ٍ٘بٞی‬ ‫اثتسا‬ٝٔ‫ثط٘ب‬ ‫یه‬ ٝ‫ث‬ ٓ‫وٙی‬.ٜ‫ؾبز‬ ٖٚ‫آؾٙىط‬ ‫ی‬ 7.5.7ُ‫ساد‬ ‫هثال‬ ‫یک‬‫آسٌکرٍى‬ ‫ی‬ ‫ثرف‬ ‫زض‬1.2َ‫ٔثب‬ ٗ‫ای‬ ،Ajax‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬JQuery:ٓ‫زیسی‬ ‫ضا‬ ٖ‫آ‬ ٝ‫ٔكبث‬ ‫وبضی‬ ‫حبال‬‫ٔی‬ ْ‫ا٘دب‬ ‫٘ٛز‬ ‫زض‬ ‫ضا‬َٚ‫ٔبغ‬ ‫اظ‬ ٖ‫آ‬ ‫ثدبی‬ ‫أب‬ ،ٓ‫زٞی‬fs‫(ٔرفف‬filesystem)‫ثبضٌص‬ ‫ثطای‬‫اضی‬resource.json‫ضٚی‬ ‫اظ‬ ‫ٔی‬ ٜ‫اؾتفبز‬ ‫زیؿه‬ٗ‫ای‬ ٝ‫ث‬ ‫وٙیس‬ ٝ‫تٛخ‬ .ٓ‫وٙی‬َ‫ٔثب‬ ٝ‫ث‬ ٝ‫قجی‬ ٝٔ‫ثط٘ب‬ ٗ‫ای‬ ‫چمسض‬ ٝ‫و‬jQuery.‫اؾت‬ ‫لجّی‬ ُ‫فبی‬ ،ٝٔ‫ثط٘ب‬ ٗ‫ای‬ ‫زض‬resource.json‫ٔی‬ ‫زیؿه‬ ‫ضٚی‬ ‫اظ‬ ‫ضا‬ٛ‫ذ‬ ٜ‫زاز‬ ْ‫تٕب‬ ٝ‫و‬ ‫ٍٞٙبٔی‬ .ٓ‫ذٛا٘ی‬‫ثب‬ ٝ‫(و‬ ْ‫٘ب‬ ٖٚ‫ثس‬ ‫تبثغ‬ ‫یه‬ ،‫قس‬ ٜ‫ا٘س‬ٖ‫ػٙٛا‬ َ‫وب‬‫ٔی‬ ٝ‫قٙبذت‬ ٓٞ ‫ثه‬‫قٛز‬‫ٔی‬ ‫فطاذٛا٘ی‬ )‫قٛز‬ٖ‫آضٌٛٔب‬ ‫زاضای‬ ‫تبثغ‬ ٗ‫ای‬ .‫ٞبی‬er‫ثطای‬ٚ ،‫احتٕبِی‬ ‫ذُبی‬dataٜ‫زاز‬ ٝ‫و‬،‫اؾت‬ ُ‫فبی‬ ‫ٞبی‬ ‫ٔی‬‫ٔی‬ ٝ‫حّم‬ ٝٙ‫نح‬ ‫پكت‬ ‫زض‬ ‫فطایٙس‬ .‫ثبقس‬ٜ‫زاز‬ ٝ‫و‬ ‫ظٔب٘ی‬ ‫تب‬ ،‫وٙس‬ ‫ضؾیسٌی‬ ‫ثیبیس‬ ٝ‫و‬ ‫زیٍطی‬ ‫ػّٕیبت‬ ‫ٞط‬ ٝ‫ث‬ ‫اؾت‬ ‫لبزض‬ ٚ ،‫ظ٘س‬ٜ‫آٔبز‬ ‫٘ظط‬ ‫ٔٛضز‬ ‫ی‬ ٝ‫ث‬ ٌٛ‫ٔطث‬ ‫ٔعایبی‬ ْ‫تٕب‬ .‫قٛز‬‫ضذسازٔحٛض‬ٖ‫ثٛز‬ ٖٚ‫آؾٙىط‬ ُٚ‫لج‬ ٝ‫و‬‫ذٛز‬ ٓ‫وطزی‬ ‫نحجت‬ ‫ٔٛضزـ‬ ‫زض‬ ‫تط‬ٝ‫ث‬.‫ٞؿتٙس‬ ٖ‫خطیب‬ ‫زض‬ ‫ذٛز‬ٗ‫ای‬ ‫تفبٚت‬‫زض‬ ‫خب‬ ٝ‫ث‬ ٝ‫و‬ ‫اؾت‬ ٗ‫ای‬‫زضذٛاؾت‬ ‫یه‬ ْ‫ا٘دب‬ ‫خبی‬Ajax‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬ ‫ٔطٚضٌط‬ ‫َطف‬ ‫اظ‬JQuery،‫اظ‬filesystem‫ٔی‬ ٜ‫اؾتفبز‬ ‫٘ٛز‬ ‫زض‬‫تب‬ ٓ‫وٙی‬ resource.jsonُ‫قى‬ ‫زض‬ ُٕ‫ػ‬ ٗ‫ای‬ .ٓ‫ثٍیطی‬ ‫ضا‬1.5.‫اؾت‬ ٜ‫قس‬ ٜ‫زاز‬ ‫ٕ٘بیف‬ 1 web server 2 streams
  • 13. 13 7.5.2"ِ‫ر‬ٍ‫سر‬HTTPِ"ُ‫ساد‬،‫خرٍجی‬ ‫با‬Hello World ِ‫ز‬‫ٔٛض‬ ‫یه‬-‫٘ٛز‬ ‫ثطای‬ ‫ضایح‬ ‫ثؿیبض‬ ‫وبضثطز‬،ٗ‫ؾبذت‬ ‫ؾطٚض‬‫ٔی‬ ٜ‫ؾبز‬ ‫ثؿیبض‬ ‫ضا‬ ‫ؾطٚضٞب‬ ‫اظ‬ ‫ٔرتّفی‬ ‫ا٘ٛاع‬ ٗ‫ؾبذت‬ ‫٘ٛز‬ .‫اؾت‬ٝ‫و‬ ‫نٛضتی‬ ‫زض‬ ،ٗ‫ای‬ .‫وٙس‬ ٝٔ‫ثط٘ب‬ ٝ‫و‬ ‫ؾطٚض‬ ‫یه‬ ٗ‫زاقت‬ ٝ‫ث‬ ‫ػبزت‬ ‫قٕب‬‫ٔی‬ ‫ٔیعثب٘ی‬ ‫ضا‬ ‫قٕب‬ ‫ی‬‫ثبقیس‬ ٝ‫زاقت‬ ‫وٙس‬ٝٔ‫ثط٘ب‬ ‫یه‬ ُ‫(ٔث‬‫ی‬PHP‫یه‬ ‫ضٚی‬ ٝ‫و‬ِ‫ض‬ٚ‫ؾط‬HTTPِ‫آپبچی‬ )ٜ‫قس‬ ‫ٔیعثب٘ی‬‫ٔی‬ ،‫تٛا٘س‬‫ػدیت‬.‫قٛز‬ ‫احؿبؼ‬ٝٔ‫ثط٘ب‬ ٚ ‫ؾطٚض‬ ،‫٘ٛز‬ ‫زض‬‫ٞؿتٙس‬ ‫یىی‬. ِ‫ض‬ٚ‫ؾط‬ ‫یه‬ ‫اظ‬ َ‫ٔثب‬ ‫یه‬ ٗ‫ای‬HTTP‫ثب‬ ‫زضذٛاؾتی‬ ‫ٞط‬ ٝ‫ث‬ ‫ؾبزٌی‬ ٝ‫ث‬ ٝ‫و‬ ‫اؾت‬"Hello World"‫ٔی‬ ‫پبؾد‬:‫زٞس‬ ‫ٔی‬ ‫اتفبق‬ ‫زضذٛاؾت‬ ‫یه‬ ‫ٚلت‬ ‫ٞط‬،‫افتس‬َ‫وب‬ِ‫ه‬‫ث‬function (req, res)‫ٔی‬ ‫فطاذٛا٘ی‬ٚ ‫قٛز‬"Hello World"ٙ‫ػ‬ ٝ‫ث‬‫ذطٚخی‬ ‫زض‬ ‫پبؾد‬ ٖ‫ٛا‬ ‫ٔی‬ ٝ‫٘ٛقت‬َِ‫ٔس‬ ٗ‫ای‬ .‫قٛز‬‫ضذساز‬‫یه‬ ٝ‫ث‬ ٖ‫زاز‬ ‫ٌٛـ‬ ‫ثب‬ ٝ‫ٔكبث‬‫ضذساز‬onclick‫ٔی‬ ‫ظٔب٘ی‬ ‫ٞط‬ ‫زض‬ ‫وّیه‬ ‫یه‬ .‫اؾت‬ ‫ٔطٚضٌط‬ ‫زض‬،‫زٞس‬ ‫ضخ‬ ‫تٛا٘س‬ ‫ٔی‬ ٓٞ‫فطا‬ ‫تبثغ‬ ‫یه‬ ‫قٕب‬ ٗ‫ثٙبثطای‬‫ثطای‬ ‫تب‬ ‫وٙیس‬ٗ‫ای‬ ‫زض‬ .‫وٙس‬ ‫اخطا‬ ‫ضا‬ ‫اػٕبِی‬ ٖ‫آ‬ ٝ‫ث‬ ‫ضؾیسٌی‬‫ٔی‬ ٓٞ‫فطا‬ ‫ضا‬ ‫تبثؼی‬ ‫٘ٛز‬ ،‫خب‬‫ٞط‬ ٝ‫و‬ ‫وٙس‬‫زضذٛاؾتی‬ ٖ‫ظٔب‬ .‫زٞس‬ ‫پبؾد‬ ،‫زاز‬ ‫ضخ‬ ‫نطیح‬ ‫نٛضت‬ ٝ‫ث‬ ٖ‫آ‬ ‫زض‬ ‫زضذٛاؾت‬ ٝ‫و‬ ‫اؾت‬ ‫ؾطٚض‬ ٖ‫ٕٞب‬ ٗ‫٘ٛقت‬ ‫ثطای‬ ‫زیٍطی‬ ٜ‫ضا‬ ٗ‫ای‬:‫اؾت‬ ٜ‫آٔس‬ ‫زض‬ ‫تطی‬
  • 14. 16 ‫فصل‬2 ِ‫برًاه‬ ‫یک‬ ‫ساختي‬ِ‫اتاق‬ ‫چٌذ‬ ‫چت‬ ‫ی‬ ‫هی‬ ‫پَضص‬ ‫فصل‬ ‫ایي‬ ِ‫ک‬ ‫هطالبی‬‫دّذ‬ ٝ‫ث‬ ‫ٍ٘بٞی‬‫اخعاء‬‫٘ٛز‬ ‫ٔرتّف‬ ٝٔ‫ثط٘ب‬ ٕٝ٘ٛ٘ ‫یه‬‫٘ٛز‬ ‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬ ً٘‫ثالزض‬ ‫ی‬ ‫والیٙت‬ ٚ ‫ؾطٚض‬ ُٔ‫تؼب‬ ُ‫فه‬ ‫زض‬1ٝ‫تٛؾؼ‬ ٝ‫و‬ ‫آٔٛذتیس‬ ،ٝ‫تٛؾؼ‬ ‫ثب‬ ‫تفبٚتی‬ ٝ‫چ‬ ‫٘ٛز‬ ‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬ ٖٚ‫آؾٙىط‬ ‫ی‬ٝٔ‫ثط٘ب‬ ‫یه‬ ٗ‫ؾبذت‬ ‫ثب‬ ،ُ‫فه‬ ٗ‫ای‬ ‫زض‬ .‫زاضز‬ ٖٚ‫ؾٙىط‬ ‫ضایح‬ ‫ی‬‫چت‬ ‫ی‬ ‫وٛچه‬‫ضذساز‬ٗ‫ای‬ ‫خعئیبت‬ ‫اٌط‬ ‫٘جبقیس‬ ٖ‫ٍ٘طا‬ .‫زاقت‬ ٓ‫ذٛاٞی‬ ‫٘ٛز‬ ٝ‫ث‬ ‫ػّٕی‬ ٜ‫ٍ٘ب‬ ‫یه‬ ،‫ٔحٛض‬‫ٔی‬ ‫٘ظط‬ ٝ‫ث‬ ‫زقٛاض‬ ٖ‫ثطایتب‬ ُ‫فه‬.‫آیس‬ :ٜ‫(ٍ٘بض٘س‬ٖ‫آ‬ ‫اظ‬ٜ‫اؾتفبز‬ ‫ُٔبِت‬ ‫اظ‬ ‫ثطذی‬ ‫تٛيیح‬ ٝ‫و‬ ‫خب‬ُ‫فه‬ ٗ‫ای‬ ‫زض‬ ٜ‫قس‬،‫آٔس‬ ‫ذٛاٞس‬ ‫ثؼس‬ َٛ‫فه‬ ‫زض‬ٝ‫ُٔبِؼ‬ ‫قبیس‬ٗ‫ای‬ ٝ‫ث‬ ُ‫فه‬ ٗ‫ای‬ ‫ی‬‫ٔٙبؾت‬ ‫نٛضت‬ ٝ‫ُٔبِؼ‬ ‫ثبض‬ ‫یه‬ ٝ‫و‬ ‫ثبقس‬‫قٛز‬‫حسی‬ ‫تب‬ ٚ‫ثٛزیس‬ ُ‫ٔبی‬ ٝ‫و‬‫ثكٛز‬ ٖ‫آ‬ ٟٓ‫ف‬ ‫زض‬ ‫ؾؼی‬،ٝ‫ُٔبِؼ‬ ‫اظ‬ ‫پؽ‬ ٌ‫ا‬‫ثؼس‬ ُٚ‫فه‬ ‫ی‬3ٚ4ً‫ا‬‫ٔدسز‬‫ثكٛز‬ ٖ‫آ‬ ٝ‫ث‬ ‫ٍ٘بٞی‬‫؛‬ٝ‫ث‬ ‫أب‬ ٝ‫٘ىت‬ َ‫حب‬ ‫ٞط‬‫ٞیچ‬ ٝ‫ث‬ ُ‫فه‬ ٗ‫ای‬ ‫ُٔبِت‬ ‫زضن‬ ْ‫ػس‬ ٝ‫و‬ ‫اؾت‬ ٗ‫ای‬ ٟٓٔ ‫ی‬‫٘ىٙس‬ ٖ‫ٍ٘طا‬ ‫ضا‬ ‫قٕب‬ ٝ‫ٚخ‬‫٘جبقس‬ ُ‫فه‬ ٗ‫ای‬ ‫زض‬ ‫قٕب‬ ‫حس‬ ‫اظ‬ ‫ثیف‬ ‫تٛلف‬ ‫ثبػث‬ ٚ– ٝ‫٘ؿر‬ ٝ‫و‬ ‫اؾت‬ ‫شوط‬ ٝ‫ث‬ ْ‫الظ‬ ً‫ب‬ٕٙ‫ي‬‫اظ‬ ٜ‫اؾتفبز‬ ‫ٔٛضز‬ ‫ی‬Socket.IOٝ‫٘ؿر‬ ُ‫فه‬ ٗ‫ای‬ ‫زض‬‫یب‬ ‫اضتمبء‬ ‫حبيط‬ َ‫حب‬ ‫زض‬ ٝ‫و‬ ‫اؾت‬ ‫ای‬‫تغییط‬ ٚ ٝ‫فت‬‫اتی‬ٜ‫وطز‬ ‫اؾت‬ٗ‫ثٙبثطای‬ ،‫ٔی‬ ‫پیكٟٙبز‬‫قٛز‬‫زضنٛضتی‬ٝ‫٘ؿر‬ ‫زاضیس‬ ‫ضا‬ ٖ‫آ‬ ‫یبزٌیطی‬ ‫لهس‬ ٝ‫و‬‫اضتم‬ ‫ی‬‫فطاثٍیطیس‬ ‫ضا‬ ٝ‫یبفت‬ ‫بء‬ٖ‫آ‬ ٝ‫ث‬ ٌٛ‫ٔطث‬ ‫وسٞبی‬ ٚ‫زضن‬ ‫حس‬ ‫زض‬ ‫تٟٙب‬ ‫ضا‬ ‫وّی‬‫وٙیس‬ ٝ‫ُٔبِؼ‬ ‫ػّٕىطز‬) ٝ‫تدطث‬ ‫قٕب‬ ٝ‫و‬ ‫اؾت‬ ٗ‫ای‬ ‫ثط‬ ‫فطيف‬ ُ‫فه‬ ٗ‫ای‬ٝ‫تٛؾؼ‬ ‫ی‬ٝٔ‫ثط٘ب‬ ‫ی‬‫ٔی‬ ‫زاضا‬ ‫ضا‬ ‫ٚة‬ ‫ی‬،‫ثبقیس‬ٝ‫پبی‬ ‫زضن‬ ‫زاضای‬‫اظ‬ ‫ای‬HTTP‫ثب‬ ٚ ،‫ٞؿتیس‬jQuery ‫آقٙبیی‬‫ذٛثی‬.‫زاضیس‬ٗ‫ای‬ ٗ‫حی‬ ‫زض‬‫ٔی‬ ّٛ‫خ‬ ٝ‫ث‬ ُ‫فه‬ ٗ‫ای‬ ‫زض‬ ٝ‫و‬:‫وطز‬ ‫ذٛاٞیس‬ ٝ‫تدطث‬ ‫ضا‬ ‫ٔٛاضز‬ ٗ‫ای‬ ‫ضٚیس‬ ٗ‫ای‬ ٖ‫زیس‬ ٚ ٝٔ‫ثط٘ب‬ ٝ‫ث‬ ‫ٔطٚضی‬ ‫ٍ٘بٞی‬‫وطز‬ ‫ذٛاٞس‬ ‫وبض‬ ٍٝ٘ٛ‫چ‬ ٝ‫و‬ ‫٘یبظٔٙسی‬ ‫ٔطٚض‬ٜ‫آٔبز‬ ْ‫ا٘دب‬ ٚ ‫فٙی‬ ‫ٞبی‬ٝٔ‫ثط٘ب‬ ‫ثطای‬ ٝ‫اِٚی‬ ‫ؾبظی‬ ٖ‫زاز‬ ٝ‫اضائ‬HTML،CSSٚ ،JavaScriptِ‫ؾطٚض‬ ٍ‫تٛؾ‬ ،‫وبضثط‬ ‫ؾٕت‬ ‫ضؾیسٌی‬‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬ ‫چت‬ ٝ‫ث‬ ٌٛ‫ٔطث‬ ْ‫پیب‬ َ‫تجبز‬ ٝ‫ث‬Socket.IO ٝٔ‫ثط٘ب‬ ‫وبضثطی‬ ٍ‫ٚاؾ‬ ‫ثطای‬ ‫وبضثط‬ ‫ؾٕت‬ ‫خبٚااؾىطیپت‬ ‫اظ‬ ٜ‫اؾتفبز‬
  • 15. 11 ‫ٔی‬ ‫قطٚع‬ ٝٔ‫ثط٘ب‬ ‫ثط‬ ‫ٔطٚضی‬ ‫ثب‬ٓ‫وٙی‬—ٝ‫و‬ ‫زیس‬ ‫ذٛاٞیس‬ٝٔ‫ثط٘ب‬،‫اؾت‬ ٜ‫قس‬ ُ‫تىٕی‬ ٝ‫و‬ ‫ظٔب٘ی‬ ‫زض‬‫ذٛاٞس‬ ‫قىّی‬ ٝ‫چ‬‫زاقت‬.‫ثٛز‬ ‫ذٛاٞس‬ ٍٝ٘ٛ‫چ‬ ‫ضفتبضـ‬ ٚ 2.7ِ‫برًاه‬ ‫بر‬ ‫هرٍری‬ ٝٔ‫ثط٘ب‬‫ٔی‬ ‫ضا‬ ٖ‫أىب‬ ٗ‫ای‬ ٖ‫وبضثطا‬ ٝ‫ث‬ ‫ؾبذت‬ ‫ذٛاٞیس‬ ُ‫فه‬ ٗ‫ای‬ ‫زض‬ ٝ‫و‬ ‫ای‬ْ‫پیب‬ ‫ٚضٚز‬ ‫ثب‬ ٝ‫و‬ ‫زٞس‬ٖ‫آ‬ ‫نٛضت‬ ٝ‫ث‬ ‫یىسیٍط‬ ‫ثب‬ ،ٜ‫ؾبز‬ ْ‫فط‬ ‫یه‬ ‫زض‬ ‫ٞب‬‫چت‬ ٗ‫الی‬ ُ‫قى‬ ‫زض‬ ٜ‫قس‬ ٜ‫زاز‬ ‫(ٕ٘بیف‬ ‫وٙٙس‬2.1،ْ‫پیب‬ ‫یه‬ .)‫قس‬ ‫ٚاضز‬ ٝ‫و‬ ‫ظٔب٘ی‬‫ٔی‬ ٜ‫فطؾتبز‬ ‫اتبق‬ ٖ‫ٕٞب‬ ‫زض‬ ‫زیٍط‬ ٖ‫وبثطا‬ ْ‫تٕب‬ ٝ‫ث‬ ،.‫قٛز‬ ‫ٔی‬ ٜ‫زاز‬ ‫وبضثط‬ ٝ‫ث‬ ‫ذٛزوبض‬ ‫نٛضت‬ ٝ‫ث‬ ٖ‫ٟٕٔب‬ ْ‫٘ب‬ ‫یه‬ ،ٝٔ‫ثط٘ب‬ ‫قطٚع‬ ٖ‫ظٔب‬ ‫زض‬‫ٔی‬ ‫أب‬ ،‫قٛز‬ٖ‫آ‬ ‫تٛا٘ٙس‬‫زض‬ ٝ‫آ٘چ‬ ‫ثب‬ ‫(ُٔبثك‬ ‫زٞٙس‬ ‫تغییط‬ ‫زؾتٛض‬ ‫یه‬ ‫ٚضٚز‬ ‫ثب‬ ‫ضا‬ ُ‫قى‬2.2‫یه‬ ‫ثب‬ ‫چت‬ ‫زؾتٛضات‬ .)‫اؾت‬ ٜ‫قس‬ ٜ‫زاز‬ ‫ٕ٘بیف‬/‫ٔی‬ ‫آغبظ‬.‫قٛ٘س‬
  • 16. 11 ‫ٔی‬ ‫وبضثط‬ ‫یه‬ ،ٝ‫ٔكبث‬ ‫ثُٛض‬‫تٛا٘س‬ٜ‫زاز‬ ‫(ٕ٘بیف‬ ،)‫قٛز‬ ‫ّٔحك‬ ٖ‫آ‬ ٝ‫ث‬ ‫زاضز‬ ‫ٚخٛز‬ ٝ‫و‬ ‫نٛضتی‬ ‫زض‬ ‫(یب‬ ‫وٙس‬ ‫ایدبز‬ ‫خسیس‬ ‫چت‬ ‫اتبق‬ ‫یه‬ ‫زؾتٛض‬ ‫یه‬ ‫ٚضٚز‬ ‫ثب‬
  • 17. 11 ُ‫قى‬ ‫زض‬ ٜ‫قس‬2.3ٝٔ‫ثط٘ب‬ ‫ثبالی‬ ‫افمی‬ ‫٘ٛاض‬ ‫زض‬ ‫خسیس‬ ‫اتبق‬ ْ‫٘ب‬ ،‫اتبق‬ ‫یه‬ ٝ‫ث‬ ٖ‫قس‬ ‫ّٔحك‬ ‫یب‬ ‫ایدبز‬ ْ‫ٍٞٙب‬ .)‫اتبق‬ ٗ‫ای‬ .‫قس‬ ‫ذٛاٞس‬ ٜ‫زاز‬ ‫ٕ٘بیف‬ ‫چت‬ ‫ی‬ ٝ‫ث‬ ٗ‫ٕٞچٙی‬‫فٟطؾت‬‫اتبق‬ٝ‫٘بحی‬ ‫ضاؾت‬ ‫ؾٕت‬ ‫زض‬ ‫زؾتطؼ‬ ‫زض‬ ‫ٞبی‬ْ‫پیغب‬ ‫ی‬‫ٔی‬ ٜ‫افعٚز‬ ‫چت‬ ‫ٞبی‬.‫قٛز‬ ‫وبضثط‬ ٝ‫آ٘ى‬ ‫اظ‬ ‫پؽ‬‫ضا‬ ‫اتبلف‬‫خسیس‬ ‫اتبق‬ ‫یه‬ ٝ‫ث‬‫ٔی‬ ‫تغییط‬‫ٔی‬ ْ‫اػال‬ ‫ضا‬ ‫تغییط‬ ْ‫ا٘دب‬ ٓ‫ؾیؿت‬ ،‫زٞس‬ٖ‫(ٕٞب‬ ‫وٙس‬ُ‫قى‬ ‫زض‬ ٝ‫و‬ ‫َٛض‬2.4.)‫اؾت‬ ٜ‫قس‬ ٜ‫زاز‬ ‫ٕ٘بیف‬ ٗ‫زضػی‬‫زض‬ ً‫ا‬‫ػٕس‬ ٝٔ‫ثط٘ب‬ ٗ‫ای‬ ‫ػّٕىطز‬ ٝ‫و‬ َ‫حب‬،‫اؾت‬ ٝ‫پبی‬ ‫حس‬‫تىٙیه‬ ٚ ٟٓٔ ‫اخعاء‬ٝٔ‫ثط٘ب‬ ‫یه‬ ٗ‫ؾبذت‬ ‫ثطای‬ ٝ‫و‬ ‫اؾبؾی‬ ‫ٞبی‬ِ‫ة‬ٚ ‫ی‬‫ٞؿتٙس‬ ْ‫الظ‬ ً٘‫ثالزض‬ ‫ٔی‬ ‫ٕ٘بیف‬ ٝ‫ث‬ ‫ضا‬.‫ٌصاضز‬ ‫ٔی‬ ٖ‫٘كب‬ ٝٔ‫ثط٘ب‬ ٗ‫ای‬‫ٔی‬ ‫٘ٛز‬ ٍٝ٘ٛ‫چ‬ ٝ‫و‬ ‫زٞس‬ٜ‫زاز‬ ٖ‫ٕٞعٔب‬ ‫ثُٛض‬ ‫تٛا٘س‬‫ٞبی‬HTTPُِ‫فبی‬ ُ‫(ٔث‬ َٕٛ‫ٔؼ‬ٜ‫زاز‬ ٚ ،)‫ایؿتب‬ ‫ٞبی‬‫ضا‬ ً٘‫ثالزض‬ ‫ٞبی‬‫زٞس‬ ٝ‫اضائ‬1 . ‫ٔی‬ ٖ‫٘كب‬ ٗ‫ٕٞچٙی‬ٝٔ‫ثط٘ب‬ ٝ‫و‬ ‫زٞس‬ٍٝ٘ٛ‫چ‬ ‫٘ٛز‬ ‫ٞبی‬ٖ‫ؾبظٔب‬‫زٞی‬‫ٔی‬ٚ ‫قٛ٘س‬‫ٚاثؿتٍی‬‫ٞب‬‫ٔی‬ ‫ٔسیطیت‬ ٍٝ٘ٛ‫چ‬.‫قٛ٘س‬ ‫فٙبٚضی‬ ٝ‫ث‬ ‫ٍ٘بٞی‬ ٖٛٙ‫او‬‫ٔی‬ ‫ٞبیی‬ٜ‫پیبز‬ ‫ثطای‬ ‫ثطای‬ ٝ‫و‬ ٓ‫ا٘ساظی‬.‫ٞؿتٙس‬ ‫٘یبظ‬ ‫ٔٛضز‬ ٝٔ‫ثط٘ب‬ ٗ‫ای‬ ‫ؾبظی‬ 2.2‫ًیازهٌذی‬ُ‫آهاد‬ ٍ ِ‫برًاه‬ ‫ّای‬ِ‫اٍلی‬ ‫سازی‬ ٝٔ‫ثط٘ب‬‫چ‬ ‫ی‬‫ت‬‫ی‬:‫زٞس‬ ْ‫ا٘دب‬ ‫ضا‬ ‫وبضٞب‬ ٗ‫ای‬ ‫ثبیس‬ ‫ؾبذت‬ ‫ذٛاٞیس‬ ‫قٕب‬ ٝ‫و‬ ُ‫فبی‬ُ‫(ٔث‬ ‫ایؿتب‬ ‫ٞبی‬HTML،CSSٚ ،JavaScriptِ‫ضا‬ )‫وبضثط‬ ‫ؾٕت‬‫زٞس‬ ٝ‫اضائ‬ ٝ‫ث‬،ْ‫پیب‬ َ‫تجبز‬ ‫أط‬‫وٙس‬ ‫ضؾیسٌی‬ ‫ؾطٚض‬ ‫ضٚی‬ ٝ‫ث‬،ْ‫پیب‬ َ‫تجبز‬ ‫أط‬‫وٙس‬ ‫ضؾیسٌی‬ ‫وبضثط‬ ‫ٔطٚضٌط‬ ‫زض‬ ‫ثطای‬ٝ‫اضائ‬ُ‫فبی‬ ‫ی‬َٚ‫ٔبغ‬ ‫اظ‬ ،‫ایؿتب‬ ‫ٞبی‬httpِ‫٘ٛز‬ ‫ذٛز‬ ‫زض‬ ٜ‫قس‬ ٝ‫تؼجی‬ٝ‫اضائ‬ ٖ‫ظٔب‬ ‫زض‬ ‫أب‬ .‫وطز‬ ‫ذٛاٞیس‬ ٜ‫اؾتفبز‬ُ‫فبی‬ ‫ی‬‫َطیك‬ ‫اظ‬ ‫ٞب‬HTTP‫وبفی‬ ‫ٔؼٕٛال‬ ، ٓٞ ‫ضا‬ ُ‫فبی‬ ‫٘ٛع‬ ٗ‫ٕٞچٙی‬ ‫ثبیس‬ ‫قٕب‬ ‫قٛز؛‬ َ‫اضؾب‬ ُ‫فبی‬ ‫ٔحتٛای‬ ٍ‫فم‬ ٝ‫و‬ ‫٘یؿت‬‫زضج‬‫و‬ٗ‫ای‬ .‫ٙیس‬‫ٔمساض‬ ‫ثب‬ ‫وبض‬‫زٞی‬ُِ‫ؾطفه‬HTTPِ2 Content-Type‫ثب‬ِ‫ع‬ٛ٘MIME3 ‫ٔی‬ ْ‫ا٘دب‬ ‫ٔٙبؾت‬‫ا٘ٛاع‬ ٗ‫ای‬ ٗ‫یبفت‬ ‫ثطای‬ .‫قٛز‬MIMEَٚ‫ٔبغ‬ ‫یه‬ ‫اظ‬ ،‫قرم‬‫ثبِث‬ْ‫٘ب‬ ‫ثب‬mime‫ذٛاٞیس‬ ٜ‫اؾتفبز‬ .‫وطز‬ 1 serve 2 HTTP header 3 MIME type
  • 18. 43 ‫فصل‬3 ِ‫برًاه‬ ‫هباًی‬‫ًَد‬ ‫با‬ ‫ًَیسی‬ ‫هی‬ ‫پَضص‬ ‫فصل‬ ‫ایي‬ ِ‫ک‬ ‫هطالبی‬‫دّذ‬ ٖ‫ؾبظٔب‬َٚ‫ٔبغ‬ ‫لبِت‬ ‫زض‬ ٖ‫وستب‬ ‫زٞی‬‫ٞب‬ ‫وس‬ ٗ‫٘ٛقت‬ ٝ‫ث‬ ٌٛ‫ٔطث‬ ‫لطاضزازٞبی‬ ‫ضذساز‬ ٝ‫ث‬ ‫ضؾیسٌی‬‫ٞبی‬‫ته‬ٝ‫ٔطتج‬‫ای‬َ‫وب‬ ‫ثب‬‫ثه‬‫ٞب‬ ‫ضذساز‬ ٝ‫ث‬ ‫ضؾیسٌی‬‫تىطاض‬ ‫ٞبی‬‫ثب‬ ٜ‫قٛ٘س‬ٜ‫نبزضوٙٙس‬‫ضذساز‬ ‫ٞبی‬ ٜ‫پیبز‬َ‫وٙتط‬ ‫ٔٛاظی‬ ٚ َ‫ؾطیب‬ ‫ؾبظی‬ٝٔ‫ثط٘ب‬ ‫اخطای‬ ٖ‫خطیب‬ ٜ‫ثٟط‬ٝٔ‫ثط٘ب‬ ‫اخطای‬ ٖ‫خطیب‬ َ‫وٙتط‬ ‫اثعاضٞبی‬ ‫اظ‬ ‫ٌیطی‬ ‫٘ٛز‬ْ‫پّتفط‬ ‫اظ‬ ‫ثؿیبضی‬ ‫ثطذالف‬ ،ٗ‫ٔت‬ ‫ٞبی‬‫ثبظ‬1 ٜ‫آٔبز‬ ،ٝ‫حبفظ‬ ٝ‫ث‬ ٚ ‫اؾت‬ ‫ضاحت‬ ‫ثؿیبض‬ ‫ؾبظیف‬‫ٞیچ‬ ٝ‫ث‬ .‫٘ساضز‬ ‫٘یبظ‬ ‫ظیبزی‬ ‫زیؿه‬ ‫فًبی‬ ٚ‫ثیّس‬ ِٓ‫ؾیؿت‬2 ‫یب‬ ٍِ‫ٔحی‬-ِ‫غ‬ٕ‫ٔدت‬-ٝ‫تٛؾؼ‬‫ی‬3 ٜ‫پیچیس‬‫ای‬‫أب‬ ‫ٔجٙبیی‬ ‫اَالػبت‬ ‫ٔمساضی‬ .‫٘یؿت‬ ‫٘یبظ‬ٝ‫ث‬ ،ُ‫فه‬ ٗ‫ای‬ ‫زض‬ .‫وطز‬ ‫ذٛاٞس‬ ‫وٕه‬ ‫ثؿیبض‬ ‫قطٚع‬ ٖ‫ظٔب‬ ‫زض‬ ‫قٕب‬ ٝ‫ث‬ َ‫ٞطحب‬ ٝ‫تٛؾؼ‬ ٝ‫و‬ ‫چبِف‬ ٚ‫ز‬ ٝ‫ث‬ٖ‫زٞٙسٌب‬ٜ‫تبظ‬ٖ‫آ‬ ‫ثب‬ ‫٘ٛز‬ ‫ی‬‫ٔی‬ ‫قس‬ ‫ذٛاٞٙس‬ ٝ‫ٔٛاخ‬ ‫ٞب‬:ٓ‫پطزاظی‬ ‫وٙیس‬ ‫ؾبظٔب٘سٞی‬ ‫ضا‬ ٖ‫وستب‬ ٍٝ٘ٛ‫چ‬ ٝٔ‫ثط٘ب‬‫چ‬ ٖٚ‫آؾٙىط‬ ‫٘ٛیؿی‬‫ُٛض‬‫ٔی‬ ‫وبض‬‫وٙس‬ ٖ‫ؾبظٔب‬ ‫چٍٍٛ٘ی‬ ُ‫ٔكى‬ٝٔ‫ثط٘ب‬ ‫ثیكتط‬ ‫ثطای‬ ‫وس‬ ‫زٞی‬.‫آقٙبؾت‬ ٝ‫تدطث‬ ‫ثب‬ ٖ‫٘ٛیؿب‬‫ُٔٙك‬‫والؼ‬ ‫لبِت‬ ‫زض‬ٖ‫ؾبظٔب‬ ‫تٛاثغ‬ ٚ ‫ٞب‬‫ٔی‬ ‫زٞی‬.‫قٛز‬ ُ‫فبی‬‫والؼ‬ ُٔ‫قب‬ ‫ٞبی‬‫تٛاثغ‬ ٚ ‫ٞب‬‫زض‬‫زایطوتٛضی‬‫ٞبیی‬ُ‫زاذ‬ ‫زض‬‫ٔٙجغ‬ ‫زضذت‬4 ٖ‫ؾبظٔب‬‫ٔی‬ ‫زٞی‬.‫قٛ٘س‬ٝٔ‫ثط٘ب‬ ‫لبِت‬ ‫زض‬ ‫وس‬ ،ٖ‫پبیب‬ ‫زض‬‫وتبة‬ ٚ ‫ٞب‬ٝ٘‫ذب‬‫ٞب‬ ٖ‫ؾبظٔب‬‫ٔی‬ ‫زٞی‬.‫قٛز‬‫لسضت‬ ْ‫ٔىب٘یع‬ ‫٘ٛز‬ ‫زض‬ َٚ‫ٔبغ‬ ٓ‫ؾیؿت‬ٖ‫ؾبظٔب‬ ‫ثطای‬ ‫ضا‬ ‫ٔٙسی‬‫ٔی‬ ٓٞ‫فطا‬ ‫وس‬ ‫زٞی‬ُ‫فه‬ ٗ‫ای‬ ‫زض‬ ‫قٕب‬ ٚ ،‫وٙس‬‫چٍٍٛ٘ی‬ ‫ثب‬ ُٝ‫ضاث‬ ‫زض‬ ٜ‫ثٟط‬ٖ‫آ‬ ‫اظ‬ ٗ‫ٌطفت‬.‫آٔٛذت‬ ‫ذٛاٞیس‬ ٝٔ‫ثط٘ب‬ ‫ثط‬ ٖ‫قس‬ ٍّ‫ٔؿ‬ ٚ ‫زضن‬ٖٚ‫آؾٙىط‬ ‫٘ٛیؿی‬‫ٔی‬‫تٛا٘س‬ٖ‫ظٔب‬ ‫ٔمساضی‬‫ثط‬‫ثبقس؛‬ٝ‫خبث‬ ‫یه‬ ٝ‫ث‬ ‫٘یبظ‬ ٚ‫زض‬ ‫خبیی‬‫َطظ‬‫تفىط‬ٗ‫ای‬ ٝ‫ث‬ٝٔ‫ثط٘ب‬ ‫ُٔٙك‬ ٝ‫و‬ٝ‫چ‬ ٝ‫ث‬ ‫نٛضت‬‫قٛز‬ ‫اخطا‬ ‫ثبیس‬‫زاضز‬.ٝٔ‫ثط٘ب‬ ‫زض‬‫ٔی‬ ‫قٕب‬ ،ٖٚ‫ؾٙىط‬ ‫٘ٛیؿی‬‫ض‬ ‫وس‬ ٍ‫ذ‬ ‫یه‬ ‫تٛا٘یس‬ٖ‫آ‬ ‫اظ‬ ُ‫لج‬ ٝ‫و‬ ‫ذَُٛی‬ ْ‫تٕب‬ ٝ‫و‬ ‫ثٙٛیؿیس‬ ّٝ‫ٔؿئ‬ ٗ‫ای‬ ٝ‫ث‬ ّٓ‫ػ‬ ‫ثب‬ ‫ضا‬ ‫ا‬ ٜ‫آٔس‬ٜ‫قس‬ ‫اخطا‬ ٝ‫ِحظ‬ ٖ‫آ‬ ‫تب‬ ‫ا٘س‬ٝٔ‫ثط٘ب‬ ‫زض‬ .‫ا٘س‬‫ٔی‬ ٝٔ‫ثط٘ب‬ ‫ُٔٙك‬ ،‫أب‬ ٖٚ‫آؾٙىط‬ ‫٘ٛیؿی‬‫ٔبقیٙی‬ ٝ‫ث‬ ٝ‫قجی‬ ‫اثتسا‬ ‫زض‬ ‫تٛا٘س‬‫ثیبیس‬ ‫٘ظط‬ ٝ‫ث‬ٜ‫پیچیس‬ ‫ضٚقی‬ ٚ ‫اثعاض‬ ‫ثب‬ ٝ‫و‬ ‫ٔی‬ ْ‫ا٘دب‬ ‫ضا‬ ٜ‫ؾبز‬ ‫وبض‬ ‫یه‬‫زٞس‬‫ضا‬ ٜ‫قس‬ ‫نطف‬ ٖ‫ظٔب‬ ‫اضظـ‬ .ٝ‫تٛؾؼ‬ ٝ‫ث‬ ‫قطٚع‬ ‫اظ‬ ُ‫لج‬ ٝ‫و‬ ‫زاضز‬ٜ‫پطٚغ‬ ‫یه‬ ‫ی‬،‫ثعضي‬ ‫ی‬ٝٔ‫ثط٘ب‬ ‫ضفتبض‬ ٍٝ٘ٛ‫چ‬ ٝ‫و‬ ‫ثیبٔٛظیس‬ٖ‫تب‬ ‫ضا‬ٝ‫ث‬‫ُّٔٛة‬ ٛ‫٘ح‬.‫وٙیس‬ َ‫وٙتط‬ ‫تىٙیه‬ ‫اظ‬ ‫تؼسازی‬ ،ُ‫فه‬ ٗ‫ای‬ ‫زض‬‫ٞبی‬ٝٔ‫ثط٘ب‬ ٟٓٔٞ‫ذٛا‬ ‫ضا‬ ٖٚ‫آؾٙىط‬ ‫٘ٛیؿی‬‫ی‬‫ٔی‬ ‫ضا‬ ٖ‫أىب‬ ٗ‫ای‬ ‫قٕب‬ ٝ‫ث‬ ٝ‫و‬ ‫آٔٛذت‬ ‫س‬‫تب‬ ‫زٞٙس‬‫زلیك‬ َ‫وٙتط‬ٜٛ‫٘ح‬‫اخطای‬ ‫ی‬ ٝٔ‫ثط٘ب‬‫ضا‬ ٖ‫تب‬‫زٞیس‬ ْ‫ا٘دب‬.ٝ‫و‬ ‫آٔٛذت‬ ‫ذٛاٞیس‬ 1 open source 2 build system 3 integrated development environment (IDE) 4 source tree
  • 19. 44 ‫ضذساز‬ ٝ‫ث‬ ٍٝ٘ٛ‫چ‬‫ٞبی‬‫ته‬ٝ‫ٔطتج‬‫ای‬‫زٞیس‬ ‫پبؾد‬ ‫ضذساز‬ ٝ‫ث‬ ٍٝ٘ٛ‫چ‬‫ٔی‬ ‫تىطاض‬ ٝ‫و‬ ‫ٞبیی‬‫وٙیس‬ ‫ضؾیسٌی‬ ‫قٛ٘س‬ ‫ثیبٚضیس‬ ‫زض‬ ‫ٔتٛاِی‬ ‫نٛضت‬ ٝ‫ث‬ ‫ضا‬ ٖٚ‫آؾٙىط‬ ‫ُٔٙك‬ ٍٝ٘ٛ‫چ‬ ‫ٔی‬ ‫قطٚع‬ ّٝ‫ٔؿئ‬ ٗ‫ای‬ ‫ثب‬ ‫أب‬‫ٔی‬ ٍٝ٘ٛ‫چ‬ ٝ‫و‬ ٓ‫وٙی‬ٜ‫ػٟس‬ ‫اظ‬ ‫تٛا٘یس‬ّٝ‫ٔؿئ‬ ‫ی‬‫ؾ‬ ‫ی‬ٖ‫بظٔب‬‫اظ‬ ٜ‫اؾتفبز‬ ‫َطیك‬ ‫اظ‬ ‫وس‬ ‫زٞی‬َٚ‫ٔبغ‬‫ٞب‬‫وس‬ ‫ٍٟ٘ساضی‬ ‫ثطای‬ ‫٘ٛز‬ ‫(ضٚـ‬ ٝ‫ث‬ٖ‫ؾبظٔب‬ ‫نٛضت‬‫زٞی‬ٚ ٜ‫قس‬ٝ‫ثؿت‬‫ثٙسی‬‫قس‬ٜ‫اؾتفبز‬ ‫ثطای‬ ٜ)ٖ‫آؾب‬ ‫ٔدسز‬ ‫ی‬‫ثطآییس‬. 3.7‫سازهاى‬ُ‫استفاد‬ ٍ ‫دّی‬‫ًَد‬ ‫در‬ ‫عولکرد‬ ‫از‬ ‫هجذد‬ ‫ی‬ ُٝ‫٘م‬ ٝ‫ث‬ ‫اغّت‬ ،ٖ‫آ‬ ‫غیط‬ ٝ‫چ‬ ‫٘ٛز‬ ٝ‫چ‬ ،ٝٔ‫ثط٘ب‬ ‫یه‬ ٗ‫ؾبذت‬ ٖ‫ظٔب‬ ‫زض‬‫ٔی‬ ‫ای‬‫ضؾیس‬‫ضا‬ َ‫وٙتط‬ ٚ ‫ٔسیطیت‬ ،‫ٚاحس‬ ُ‫فبی‬ ‫یه‬ ‫زض‬ ‫وس‬ ْ‫تٕب‬ ٖ‫زاز‬ ‫لطاض‬ ‫زیٍط‬ ٝ‫و‬ ‫ٔی‬ ‫زقٛاض‬.‫وٙس‬‫ٔی‬ ‫ضخ‬ ّٝ‫ٔؿئ‬ ٗ‫ای‬ ٝ‫و‬ ‫ظٔب٘ی‬ٖ‫ٕٞب‬ ،ْٛ‫ٔطؾ‬ ‫ضٞیبفت‬ ،‫زٞس‬ٝ‫ث‬ ٝ‫و‬ ‫َٛض‬ُ‫قى‬ ‫زض‬ ‫تهٛیطی‬ ‫نٛضت‬3.1ٝ‫و‬ ‫اؾت‬ ٗ‫ای‬ ،‫اؾت‬ ٜ‫قس‬ ٜ‫زاز‬ ٖ‫٘كب‬ ‫ضا‬ ‫وس‬ ‫ظیبزی‬ ‫ٔمساض‬ ‫حبٚی‬ ُ‫فبی‬ ‫یه‬ٓ‫ثطزاضی‬ٖ‫ؾبظٔب‬ ٝ‫ث‬ ْ‫السا‬ ٚ‫َط‬ ‫اظ‬ ٖ‫آ‬ ‫زٞی‬ٜٚ‫ٌط‬ ‫یك‬‫ثرف‬ ‫ثٙسی‬‫ُٔٙك‬ ‫زض‬ ٍ‫ٔطتج‬ ‫ٞبی‬،ٖ‫آ‬ َ‫ا٘تمب‬ ٚ‫ٞب‬ُ‫فبی‬ ٝ‫ث‬‫ٞبی‬ .ٓ‫وٙی‬ ٝ٘‫خساٌب‬ٖ‫ظثب‬ ‫ثطذی‬ ‫زض‬ُ‫ٔث‬ ،‫ٞب‬PHPٚRuby،ٖ‫آ‬ ٝ‫(ث‬ ‫زیٍط‬ ُ‫فبی‬ ‫یه‬ ‫اظ‬ ‫ُٔٙك‬ ٖ‫وطز‬ ‫ٚاضز‬،ُِ‫فبی‬"ٜ‫ٌٙدب٘س‬ٜ‫قس‬"1 )‫ٌفت‬ ٓ‫ذٛاٞی‬‫ٔی‬‫تٛا٘س‬ ٗ‫ای‬‫اخطا‬ ِ‫ك‬ُٙٔ ْ‫تٕب‬ ٝ‫و‬ ‫ثسٞس‬ ‫ضا‬ ‫ٔؼٙب‬ُِ‫فبی‬ ‫زض‬ ٜ‫قس‬،ٜ‫قس‬ ٜ‫ٌٙدب٘س‬ِٚ‫لّٕط‬‫ؾطاؾطی‬2 ‫ضا‬‫ٔی‬ ‫لطاض‬ ‫تبثیط‬ ‫تحت‬‫زٞس‬. ‫ٔؼطفی‬ ‫تبثغ‬ ‫ٞط‬ ٚ ٜ‫قس‬ ٝ‫ؾبذت‬ ‫ٔتغیط‬ ‫ٞط‬ ٝ‫و‬ ‫اؾت‬ ‫ٔؼٙی‬ ٗ‫ثسی‬ ٗ‫ای‬ٜ‫قس‬3 ‫ذُط‬ ،ٜ‫قس‬ ٜ‫ٌٙدب٘س‬ ُ‫فبی‬ ‫زض‬‫ضٚ٘ٛیؿی‬4 ٖ‫آ‬ ‫ضٚی‬ٜ‫قس‬ ٝ‫ؾبذت‬ ٝٔ‫ثط٘ب‬ ‫زض‬ ٝ‫و‬ ‫ٞبیی‬ ٜ‫قس‬ ‫ٔؼطفی‬ ٚ.‫زاضز‬ ‫پی‬ ‫زض‬ ‫ضا‬ ‫ا٘س‬ ‫ثب‬ ٝٔ‫ثط٘ب‬ ٗ‫٘ٛقت‬ َ‫حب‬ ‫زض‬ ‫وٙیس‬ ‫فطو‬ ‫ٔثال‬PHPٝٔ‫ثط٘ب‬ ‫ثبقیس؛‬:‫ثبقس‬ ‫ظیط‬ ‫ُٔٙك‬ ُٔ‫قب‬ ‫اؾت‬ ٗ‫ٕٔى‬ ‫قٕب‬ ‫ی‬ 1 included 2 global scope 3 declared 4 overwriting
  • 20. 41 3.7.2ٌِ‫بْی‬‫سازی‬‫از‬ ُ‫استفاد‬ ‫با‬ ‫هاشٍل‬ ‫ساخت‬module.exports ‫ٞطچٙس‬‫ٔمساضزٞی‬‫قیء‬exports‫ٔتغیط‬ ٚ ‫تٛاثغ‬ ‫ثب‬‫اؾت‬ ‫ٔٙبؾت‬ َٚ‫ٔبغ‬ ‫ؾبذت‬ ‫٘یبظٞبی‬ ‫ثیكتط‬ ‫ثطای‬ ‫ٞب‬ٖ‫ظٔب‬ ،‫تب‬ ‫ثرٛاٞیس‬ ٝ‫و‬ ‫آٔس‬ ‫ذٛاٞس‬ ‫پیف‬ ‫ٞبیی‬ .‫وٙس‬ َٚ‫ػس‬ َ‫ٔس‬ ٗ‫ای‬ ‫اظ‬ َٚ‫ٔبغ‬ ‫یه‬ ٝ‫ث‬ُ‫تجسی‬ َٚ‫ٔبغ‬ ،َ‫ٔثب‬ ٖ‫ػٙٛا‬ٜ‫وٙٙس‬ُ‫لج‬ ٝ‫و‬ َٛ‫پ‬ ‫ٚاحس‬ ‫ی‬‫ٔی‬ ،‫قس‬ ٝ‫ؾبذت‬ ‫ثرف‬ ٗ‫ای‬ ‫زض‬ ‫تط‬ُ‫قى‬ ٗ‫ای‬ ٝ‫ث‬ ‫تٛا٘س‬ٜ‫زٚثبض‬ٝ‫٘ٛقت‬ٝ‫ث‬ ٝ‫و‬ ‫قٛز‬‫خبی‬ٖ‫ثطٌطزا٘س‬‫یه‬ ‫اؾت‬ ‫تٛاثؼی‬ ‫حبٚی‬ ٝ‫و‬ ‫قیء‬،‫یه‬‫ػسز‬‫تبثغ‬ٜ‫ؾبظ٘س‬‫ی‬1 Currencyٜ‫پیبز‬ ‫یه‬ .‫ثطٌطزا٘س‬ ‫ضا‬‫قیءٌطا‬ ‫ؾبظی‬‫ٔی‬:‫ثبقس‬ ٗ‫ای‬ ٝ‫ث‬ ٝ‫قجی‬ ‫چیعی‬ ‫تٛا٘س‬ ‫اظ‬ ‫تبثغ‬ ‫یه‬ ‫ثبظٌكت‬requireٝ‫ث‬‫خبی‬‫ثبظٌكت‬‫قیء‬ ‫یه‬ٖ‫آ‬ ‫اظ‬‫ٔی‬ َٚ‫ٔبغ‬ ‫اظ‬ ٝ‫و‬ ‫اؾت‬ ‫چیعی‬ ‫تٟٙب‬ ٗ‫ای‬ ٝ‫و‬ ‫نٛضتی‬ ‫زض‬ ،‫ضا‬ ‫قٕب‬ ‫وس‬ ،‫ذٛاٞیس‬ ‫ذٛـ‬‫ؾبذت‬‫تط‬‫ٔی‬.‫وٙس‬ ‫ٔی‬ ‫ثط‬ ‫تبثغ‬ ‫یب‬ ‫ٔتغیط‬ ‫ػسز‬ ‫یه‬ ٝ‫و‬ َٚ‫ٔبغ‬ ‫یه‬ ٗ‫ؾبذت‬ ‫ثطای‬ٝ‫و‬ ‫ثع٘یس‬ ‫حسؼ‬ ‫اؾت‬ ٗ‫ٕٔى‬ ،‫ٌطزا٘س‬‫ثبیس‬exports‫ضا‬ٝ‫ث‬‫ؾبزٌی‬‫ٔی‬ ٝ‫و‬ ‫چیعی‬ ‫ٞط‬ ‫ثب‬‫ذٛاٞیس‬ ٝ‫و‬ ‫زاضز‬ ‫تٛلغ‬ ‫٘ٛز‬ ٖٛ‫چ‬ ،‫وطز‬ ‫٘رٛاٞس‬ ‫وبض‬ ٗ‫ای‬ ‫أب‬ .‫وٙیس‬ ‫ٔمساضزٞی‬ ‫قٛز‬ ٜ‫ثطٌطزا٘س‬exportsً‫ا‬‫ٔدسز‬‫ثب‬‫ٞیچ‬‫قیء‬‫ٔتغیط‬ ‫یب‬ ،‫تبثغ‬ ،‫ٔمساض‬ ‫زیٍطی‬‫زٞی‬ .‫٘كٛز‬‫زض‬ ‫ٔٛخٛز‬ َٚ‫ٔبغ‬ ‫وس‬‫ٕ٘بی‬‫ٔمساض‬ ٝ‫ث‬ ْ‫السا‬ ‫ثؼسی‬‫زٞی‬exports‫ٔی‬ ‫تبثغ‬ ‫یه‬ ‫ثب‬.‫وٙس‬ ٗ‫ای‬ ‫ثطای‬ٖ‫ٕٞب‬ ُ‫لج‬ َٚ‫ٔبغ‬ ‫تب‬ ٓ‫وٙی‬ ‫وبضی‬ ٝ‫و‬ٝ‫و‬ ‫زاضیس‬ ‫٘یبظ‬ ،‫وٙس‬ ‫وبض‬ ‫اؾت‬ ‫ا٘تظبض‬ ‫ٔٛضز‬ ٝ‫و‬ ‫َٛض‬exports‫ثب‬ ‫ضا‬module.exports.‫وٙیس‬ ٗ‫خبیٍعی‬ ْ‫ٔىب٘یع‬module.exports‫ٔی‬ ‫ضا‬ ٖ‫أىب‬ ٗ‫ای‬ ‫قٕب‬ ٝ‫ث‬‫ضا‬ ‫قیء‬ ‫یب‬ ،‫تبثغ‬ ،‫ٔتغیط‬ ‫ته‬ ‫یه‬ ‫تب‬ ‫زٞس‬‫نبزض‬2 .‫وٙیس‬ٓٞ ٝ‫و‬ ‫ثؿبظیس‬ ‫ٔبغِٚی‬ ‫اٌط‬exportsٚ ٓٞmodule.exports،‫ثبقس‬ ٜ‫وطز‬ ‫ٔمساضزٞی‬ ‫ضا‬module.exports‫ٔی‬ ٜ‫ثبظٌطزا٘س‬ٚ ‫قٛز‬exports‫ٔی‬ ٝ‫ٌطفت‬ ٜ‫٘بزیس‬.‫قٛز‬ ‫هی‬ ‫صادر‬ ً‫ا‬‫حقیقت‬ ‫چیس‬ ِ‫چ‬‫ضَد‬ ٖ‫آ‬ٝٔ‫ثط٘ب‬ ٝ‫ث‬ ً‫ب‬‫ٟ٘بیت‬ ٝ‫و‬ ٝ‫چ‬‫ٔی‬ ‫نبزض‬ ‫قٕب‬ ‫ی‬‫قٛز‬module.exports.‫اؾت‬exportsٝ‫ث‬ِ‫ع‬‫اضخب‬ ‫یه‬ ‫ؾبزٌی‬3 ٝ‫ث‬ ‫ؾطاؾطی‬ 1 constructor function 2 export 3 reference
  • 21. 55 module.exportsٝ‫ث‬ ‫آغبظ‬ ‫زض‬ ٝ‫و‬ ،‫اؾت‬‫ٔی‬ ٝ‫و‬ ‫ذبِی‬ ‫قیء‬ ‫یه‬ ‫نٛضت‬ٗ‫ثٙبثطای‬ .‫اؾت‬ ٜ‫قس‬ ‫تؼطیف‬ ‫ثیفعاییس‬ ‫ذهٛنیبت‬ ٖ‫آ‬ ٝ‫ث‬ ‫تٛا٘یس‬ ِ‫ت‬‫ػجبض‬ ً‫ال‬‫ٔث‬exports.myFuncٜ‫وٛتب‬ ٗ‫خبیٍعی‬ ‫یه‬ ‫تٟٙب‬‫ثطای‬ ‫تط‬module.exports.myFunc.‫اؾت‬ ‫اٌط‬ ً‫ب‬‫٘تیدت‬‫ٔمساض‬exportsٝ‫ث‬ ٝ‫و‬ ٓ‫وٙی‬ ‫ػٛو‬ ‫ضا‬‫اضخبع‬ ‫زیٍطی‬ ‫چیع‬‫وٙس‬ٗ‫ثی‬ ‫اضخبع‬ ،module.exportsٚexports‫ٔی‬ ‫لُغ‬ٚ .‫قٛز‬ ٖٛ‫چ‬module.exports‫ٔی‬ ‫نبزض‬ ً‫ب‬‫حمیمت‬ ٝ‫و‬ ‫اؾت‬ ‫چیعی‬،‫قٛز‬exportsٖ‫آ‬ ‫زیٍط‬‫وطز‬ ‫٘رٛاٞس‬ ‫وبض‬ ‫اؾت‬ ‫ا٘تظبض‬ ‫ٔٛضز‬ ٝ‫و‬ ‫َٛض‬—‫زیٍط‬ ٝ‫ث‬module.exports‫ٕ٘ی‬ ‫اضخبع‬،‫وٙس‬ ‫پیسا‬ ٝٔ‫ازا‬ َ‫اتهب‬ ٗ‫ای‬ ٝ‫و‬ ‫ثرٛاٞیس‬ ‫اٌط‬ .‫وٙس‬‫ٔی‬ٝ‫و‬ ‫وٙیس‬ ‫وبضی‬ ‫تٛا٘یس‬module.exportsٜ‫زٚثبض‬ ٝ‫ث‬exports:ُ‫قى‬ ٗ‫ای‬ ٝ‫ث‬ ،‫وٙس‬ ‫اضخبع‬ ‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬exports‫یب‬module.exports‫ٔی‬ ،‫زاضیس‬ ٝ‫و‬ ‫٘یبظی‬ ٝ‫ث‬ ٝ‫ثؿت‬ ،َٚ‫ٔبغ‬ ‫لبِت‬ ‫زض‬ ‫ضا‬ ‫ػّٕىطزٞب‬ ‫تٛا٘یس‬ٖ‫ؾبظٔب‬ ‫ٞب‬‫اظ‬ ٚ ‫وٙیس‬ ‫زٞی‬‫ٌطفتبض‬ ٖ‫قس‬ْ‫زا‬ ‫زض‬‫اؾىطیپت‬‫ٞبی‬ٝ‫ٕٞیك‬‫ضقس‬ َ‫حب‬ ‫زض‬.‫وٙیس‬ ‫اختٙبة‬ 3.7.3ُ‫استفاد‬‫هاشٍل‬ ‫از‬ ‫هجذد‬ ‫ی‬ِ‫پَض‬ ‫از‬ ُ‫استفاد‬ ‫با‬ ‫ّا‬‫ی‬node_modules ْ‫اِعا‬َٚ‫ٔبغ‬ٖ‫ٔىب‬ ‫زض‬ ٗ‫زاقت‬ ‫لطاض‬ ٝ‫ث‬ ‫ٞب‬ٖ‫ؾبظٔب‬ ‫ثطای‬ ،ٝٔ‫ثط٘ب‬ ٝ‫ث‬ ‫٘ؿجت‬ ‫٘ؿجی‬ ‫ٞبی‬ِ‫س‬‫و‬ ‫زٞی‬ٝٔ‫ثط٘ب‬ ٝ‫ث‬ ‫ٔرتم‬‫ا‬‫ذبل‬ ‫ی‬‫ٔفیس‬ٝ‫و‬ ‫وسی‬ ‫ثطای‬ ‫أب‬ ،‫اؾت‬ ٖ‫آ‬ ‫ثرٛاٞیس‬ٝٔ‫ثط٘ب‬ ‫زض‬ ً‫ا‬‫ٔدسز‬ ‫ضا‬‫اؾت‬ ‫ٔرتّف‬ ‫ٞبی‬‫ثٍصاضیس‬ ‫اقتطان‬ ٝ‫ث‬ ٖ‫زیٍطا‬ ‫ثب‬ ‫یب‬ ‫وٙیس‬ ٜ‫فبز‬‫٘ساضز‬ ‫ضا‬ ٜ‫فبیس‬ ٖ‫ٕٞب‬.‫فطز‬ ٝ‫ث‬ ‫ٔٙحهط‬ ْ‫ٔىب٘یع‬ ‫یه‬ ‫زاضای‬ ‫٘ٛز‬ ‫ثطای‬ٜ‫اؾتفبز‬ٜ‫اخبظ‬ ٝ‫و‬ ‫اؾت‬ ‫وس‬ ‫اظ‬ ‫ٔدسز‬ ‫ی‬‫ی‬‫ٔی‬ ُ‫فبی‬ ٓ‫ؾیؿت‬ ‫زض‬ ٖ‫آ‬ ٖ‫ٔىب‬ ٗ‫زا٘ؿت‬ ٖٚ‫ثس‬ ‫ضا‬ َٚ‫ٔبغ‬ ‫یه‬ ْ‫اِعا‬‫زایطوتٛضی‬ ‫اظ‬ ٜ‫اؾتفبز‬ ْ‫ٔىب٘یع‬ ٗ‫ای‬ .‫زٞس‬ node_modules.‫اؾت‬
  • 22. 51 ،ُ‫لج‬ َ‫ٔثب‬ ‫زض‬./currency‫اٌط‬ .‫وطزیس‬ ْ‫اِعا‬ ‫ضا‬./ٍ‫فم‬ ٚ ‫وٙیس‬ ‫حصف‬ ‫ضا‬currencyَٚ‫ٔبغ‬ ٗ‫ای‬ ‫خؿتدٛی‬ ‫ثطای‬ ٜ‫لبػس‬ ‫تؼسازی‬ ‫اظ‬ ‫٘ٛز‬ ،‫وٙیس‬ ْ‫اِعا‬ ‫ضا‬ ‫ٔی‬ ‫پیطٚی‬ٖ‫(ٕٞب‬ ‫وٙس‬ُ‫قى‬ ‫زض‬ ٝ‫و‬ ‫َٛض‬3.5.)‫اؾت‬ ٜ‫قس‬ ‫ٔكرم‬ ِ‫ی‬ُ‫ٔحی‬ ِ‫ط‬‫ٔتغی‬1 NODE_PATHٖ‫ٔىب‬ ٖ‫وطز‬ ‫ٔكرم‬ ‫ثطای‬ ‫ضا‬ ‫ضٚقی‬َٚ‫ٔبغ‬ ‫ثطای‬ ٗ‫ٕٔى‬ ‫ٞبی‬‫ٔی‬ ٓٞ‫فطا‬ ‫٘ٛز‬ ‫ٞبی‬،ٜ‫اؾتفبز‬ ‫نٛضت‬ ‫زض‬ .‫وٙس‬ NODE_PATH‫زایطوتٛضی‬ ‫اظ‬ ‫ِیؿتی‬ ‫ثب‬ ‫ثبیس‬‫ٔمساض‬ ‫ٞب‬‫ٚیٙسٚظ‬ ‫زض‬ ٝ‫و‬ ‫قٛز‬ ‫زٞی‬‫ِٕی‬‫ؾ‬ ‫ثب‬ُِ‫وب‬ٚ ٗٝ‫ثمی‬ ‫زض‬ٓ‫ؾیؿت‬ ‫ی‬ُٔ‫ػب‬ُِٗ‫وب‬ ‫ثب‬ ‫ٞب‬‫خسا‬ ٓٞ ‫اظ‬ ‫ٔی‬.‫قٛ٘س‬ 1 environmental variable
  • 23. 11 ‫بخص‬2 ِ‫تَسع‬ِ‫برًاه‬ ‫ی‬‫ًَد‬ ‫با‬ ‫ٍب‬ ‫ّای‬ ‫ػّٕىطز‬ ٗ‫زاقت‬HTTPٝ‫ث‬ٝ‫تؼجی‬ ‫نٛضت‬‫٘ٛز‬ ‫ذٛز‬ ‫زض‬ ٜ‫قس‬‫تٙبؾت‬ ‫ٚخٛز‬ ‫ثبػث‬ ،‫شاتی‬ٝ‫تٛؾؼ‬ ‫ثطای‬ ‫٘ٛز‬ ‫زض‬ٝٔ‫ثط٘ب‬ ‫ی‬‫ٚة‬ ‫ٞبی‬‫ٔی‬ٝ‫تٛؾؼ‬ ‫اظ‬ ‫٘ٛع‬ ٗ‫ای‬ .‫قٛز‬ ٗ‫پطَطفساضتطی‬‫اؾت‬ ‫٘ٛز‬ ‫اظ‬ ٜ‫اؾتفبز‬. ٗ‫ای‬ ‫زض‬‫ثرف‬‫ػّٕىطز‬ ‫اظ‬ ٍٝ٘ٛ‫چ‬ ٝ‫و‬ ‫آٔٛذت‬ ‫ذٛاٞیس‬HTTPِ‫تؼجی‬ٖٝ‫آ‬ ‫اظ‬ ‫پؽ‬ ٚ ،‫وٙیس‬ ٜ‫اؾتفبز‬ ‫٘ٛز‬ ٖٚ‫زض‬ ‫زض‬ ٜ‫قس‬‫فهّی‬ٜ‫شذیط‬ ‫ثب‬ ُٝ‫ضاث‬ ‫زض‬‫ؾبظی‬ ٜ‫زاز‬ٝٔ‫ثط٘ب‬ ‫ٞبی‬‫٘ٛز‬ ‫ٞبی‬‫آٔس‬ ‫ذٛاٞس‬.
  • 24. 11
  • 25. 15 ‫فصل‬4 ِ‫برًاه‬ ‫ساختي‬‫ًَد‬ ‫ٍب‬ ‫ّای‬ ‫هی‬ ‫پَضص‬ ‫فصل‬ ‫ایي‬ ِ‫ک‬ ‫هطالبی‬‫دّذ‬ ‫زضذٛاؾت‬ ٝ‫ث‬ ‫ضؾیسٌی‬‫ٞبی‬HTTP‫ثب‬APIِ‫٘ٛز‬ ‫یه‬ ٗ‫ؾبذت‬"ِ‫ة‬ٚ ِ‫ؽ‬‫ؾطٚی‬"1 RESTful ٝ‫اضائ‬ُ‫فبی‬ ‫ی‬‫ایؿتب‬ ‫ٞبی‬ ْ‫فط‬ ‫اظ‬ ‫وبضثط‬ ‫ٚضٚزی‬ ‫زضیبفت‬‫ٞب‬ ٕٗ‫ای‬‫ثب‬ ٝٔ‫ثط٘ب‬ ‫ؾبظی‬HTTPS ‫اث‬ ‫ثب‬ ،ُ‫فه‬ ٗ‫ای‬ ‫زض‬ٗ‫ؾبذت‬ ‫ثطای‬ ‫٘ٛز‬ ٝ‫و‬ ‫عاضٞبیی‬‫ؾطٚضٞب‬‫ی‬HTTP‫ٔی‬ ٓٞ‫فطا‬َٚ‫ٔبغ‬ ٚ ،‫قس‬ ‫ذٛاٞیس‬ ‫آقٙب‬ ‫وٙس‬fs(filesystemٝ‫اضائ‬ ‫ثطای‬ ٝ‫و‬ )‫ی‬ ُ‫فبی‬‫ٔی‬ ‫ٔؼطفی‬ ‫اؾت‬ ‫يطٚضی‬ ‫ایؿتب‬ ‫ٞبی‬‫زیٍط‬ َٕٛ‫ٔؼ‬ ‫٘یبظٞبی‬ ٍٝ٘ٛ‫چ‬ ٝ‫و‬ ‫آٔٛذت‬ ‫ذٛاٞیس‬ ٗ‫ٕٞچٙی‬ .‫قٛز‬‫زض‬ٝٔ‫ثط٘ب‬‫ثطآٚضیس‬ ‫ضا‬ ‫ٚة‬ ‫ٞبی‬ُ‫لجی‬ ‫اظ‬ ، ٗ‫ؾبذت‬ِ‫ة‬ٚ ِ‫ؽ‬‫ؾطٚی‬RESTfulْ‫فط‬ ‫َطیك‬ ‫اظ‬ ‫وبضثط‬ ‫اظ‬ ‫ٚضٚزی‬ ‫زضیبفت‬ ،ٗ‫پبیی‬ ‫ؾُح‬‫ٞب‬‫ی‬HTML‫آح‬ ‫پیكطفت‬ ‫ضنس‬ ،ِ‫ز‬ِٛ‫یه‬ ٖ‫وطز‬ ٗٔ‫ا‬ ٚ ،ُ‫فبی‬ ٝٔ‫ثط٘ب‬‫ثب‬ ‫ٚة‬ ‫ی‬Secure Sockets Layer(SSL)‫٘ٛز‬. ٝ‫ٞؿت‬ ‫زض‬‫یه‬ ‫٘ٛز‬ ‫ی‬"ٝ‫تدعی‬ٜ‫وٙٙس‬‫ی‬HTTPِٗ‫حی‬ ِٖ‫خطیب‬"2 ‫لسضت‬‫ٔٙس‬‫اظ‬ ٝ‫و‬ً‫ا‬‫حسٚز‬1500ٝٙ‫ثٟی‬ ‫وس‬ ٍ‫ذ‬ٖ‫ظثب‬ ٝ‫ث‬ ٜ‫قس‬C‫اؾت‬ ٜ‫قس‬ ُ‫تكىی‬،‫ٚخٛز‬ ،‫زاضز‬ٍ‫تٛؾ‬ ٝ‫و‬ٜ‫ؾبظ٘س‬ ‫قرم‬‫٘ٛز‬ ‫ی‬.‫اؾت‬ ٜ‫قس‬ ٝ‫٘ٛقت‬ٗ‫ای‬ٝ‫تدعی‬ٜ‫وٙٙس‬‫ثب‬ ‫تطویت‬ ‫زض‬ ،APIِTCPِ‫ؾُح‬ِ‫خبٚااؾىطیپت‬ ‫اذتیبض‬ ‫زض‬ ‫٘ٛز‬ ٝ‫و‬ ‫پبییٙی‬ ‫ٔی‬ ‫لطاض‬‫ثط‬ ،‫زٞس‬‫ا‬ِ‫ض‬ٚ‫ؾط‬ ‫یه‬ ٖ‫یتب‬HTTPِ،ٗ‫پبیی‬ ‫ؾُح‬ ‫ذیّی‬‫ٔی‬ ٓٞ‫فطا‬ ‫ضا‬ ‫ٔٙؼُف‬ ‫ثؿیبض‬ ‫أب‬.‫وٙس‬ 1 web service 2 streaming HTTP parser
  • 26. 11 َٚ‫ٔبغ‬ ‫ثیكتط‬ ‫ٔب٘ٙس‬ٝ‫ٞؿت‬ ُ‫زاذ‬ ‫ٞبی‬َِٚ‫ٔبغ‬ ،‫٘ٛز‬ ‫ی‬http‫َطفساضی‬ ‫ؾبزٌی‬ ‫اظ‬‫ٔی‬‫وٙس‬.ٖ‫وطز‬ ٓٞ‫فطا‬API‫ؾُح‬ ‫ٞبی‬ِ‫ثبال‬ٖ‫آؾب‬ ‫ثطای‬‫وبضٞب‬ ٖ‫وطز‬ ‫تط‬ ٜ‫ثطػٟس‬ٓ‫فطی‬ ‫ی‬‫ٚضن‬‫قر‬ ‫ٞبی‬‫م‬‫ٔی‬ ٝ‫ٌصاقت‬ ‫ثبلی‬ ‫ثبِث‬‫قٛ٘س‬.ُ‫قى‬4.1‫وبِجس‬‫قٙبؾی‬ٝٔ‫ثط٘ب‬ ‫یه‬‫ی‬‫تحت‬‫ٔی‬ ‫ٕ٘بیف‬ ‫ضا‬ ‫٘ٛز‬ ‫ٚة‬،‫زٞس‬‫ٔی‬ ٖ‫٘كب‬ ٚٝ‫و‬ ‫زٞس‬ API‫ٔی‬ ٝ‫ٞؿت‬ ‫زض‬ ٗ‫پبیی‬ ‫ؾُح‬ ‫ٞبی‬‫تدطز‬ ٚ ،‫ٔب٘ٙس‬‫ٞب‬ٜٚ‫پیبز‬‫ؾبظی‬‫ٞب‬،‫اخعای‬ ٖ‫آ‬ ‫ضٚی‬ ‫ثط‬ٜ‫ؾبظ٘س‬ٝ‫پبی‬ ‫ی‬‫ٔی‬ ٝ‫ؾبذت‬.‫قٛ٘س‬ ‫اظ‬ ‫ثطذی‬ ً‫ب‬ٕ‫ٔؿتمی‬ ُ‫فه‬ ٗ‫ای‬API‫ٔی‬ ‫پٛقف‬ ‫ضا‬ ‫٘ٛز‬ ٗ‫پبیی‬ ‫ؾُح‬ ‫ٞبی‬.‫زٞس‬‫نٛضتی‬ ‫زض‬‫فط‬ ٚ ‫ثبالتط‬ ‫ؾُح‬ ٓ‫ٔفبٞی‬ ٝ‫ث‬ ‫ثیكتط‬ ٝ‫و‬‫ی‬ٓ‫ٚضن‬ٝ‫ػالل‬ ‫ٚة‬ ‫ٞبی‬ ُ‫(ٔث‬ ‫زاضیس‬Express‫ٔی‬ ٚ )‫ذٛاٞیس‬ً‫ب‬ٕ‫ٔؿتمی‬ٖ‫آ‬ ‫ؾطاؽ‬ ٝ‫ث‬‫ثطٚیس‬ ‫ٞب‬‫ٔی‬‫وٙیس‬ ‫ػجٛض‬ ُ‫فه‬ ٗ‫ای‬ ‫اظ‬ ‫تٛا٘یس‬ٓ‫فطی‬ ٗ‫ای‬ ٝ‫ث‬ ‫وتبة‬ ٗ‫ای‬ ‫زض‬ ‫(ٞطچٙس‬‫ٚضن‬‫ٞب‬ ‫ٕ٘ی‬ ٝ‫پطزاذت‬)‫قٛز‬ٝٔ‫ثط٘ب‬ ٗ‫ؾبذت‬ ‫اظ‬ ُ‫لج‬ ‫أب‬ .ِ‫ة‬ٚ ‫ٞبی‬‫َٙی‬‫غ‬‫٘ٛز‬ ‫ثب‬‫ثب‬ ‫تب‬ ‫زاقت‬ ‫ذٛاٞیس‬ ‫٘یبظ‬ ،APIِ-HTTPِ‫ثٙیبزی‬‫ٔی‬ ٝ‫و‬ ،‫قٛیس‬ ‫آقٙب‬‫ثؿتطی‬ ‫تٛا٘س‬ ٓ‫فطی‬ ٚ ‫اثعاضٞب‬ ٖ‫قس‬ ٝ‫ؾبذت‬ ‫ثطای‬ ‫ثبقس‬‫ٚضن‬‫ثبالتط‬ ‫ؾُح‬ ‫ٞبی‬ٖ‫آ‬ ‫ثط‬ ‫ٔجتٙی‬. 4.7ِ‫ر‬ٍ‫سر‬ ‫هباًی‬HTTP
  • 27. 11 ٖٛٙ‫او‬ٝ‫اضائ‬ ٝ‫ث‬ ٗ‫پبیی‬ ‫ؾُح‬ ‫ٍ٘بٞی‬ ٝ‫و‬ٝ‫ا٘ساذت‬ ‫٘ٛز‬ ٍ‫تٛؾ‬ ُ‫فبی‬ ‫ی‬‫ٔی‬ ‫ٍ٘بٞی‬ ،ٓ‫ای‬ٝ‫تٛؾؼ‬ ‫اظ‬ ‫زیٍط‬ ‫ذهٛنیت‬ ‫یه‬ ٝ‫ث‬ ٓ‫ا٘ساظی‬ٝٔ‫ثط٘ب‬ ‫ی‬‫ٚة‬ ‫ٞبی‬ٖ‫ٕٞب‬ ٝ‫ث‬ ٝ‫و‬ ‫ا‬ْ‫فط‬ ‫اظ‬ ٖ‫وبضثطا‬ ‫ٚضٚزی‬ ‫زضیبفت‬ :‫اؾت‬ ‫ٟٔتط‬ ‫قبیس‬ ٚ ،َٚ‫ٔتسا‬ ٜ‫٘ساظ‬‫ٞبی‬HTML. 4.4‫فرم‬ ‫از‬ ‫کاربراى‬ ‫ٍرٍدی‬ ‫دریافت‬‫ّا‬ ٝٔ‫ثط٘ب‬ٝ‫ث‬ ‫ٚة‬ ‫ٞبی‬‫ٔی‬ ‫زضیبفت‬ ْ‫فط‬ َ‫اضؾب‬ ‫َطیك‬ ‫اظ‬ ‫ضا‬ ٖ‫وبضثطا‬ ‫ٚضٚزی‬ َٚ‫ٔتسا‬ ‫َٛض‬ْ‫ا٘دب‬ ‫٘ٛز‬ .‫وٙٙس‬‫ثؼسی‬ ‫وبضٞبی‬)ُ‫فبی‬ ‫آپّٛز‬ ‫یب‬ ‫اػتجبضؾٙدی‬ ُ‫لجی‬ ‫(اظ‬ ‫ٕ٘ی‬ ْ‫ا٘دب‬ ‫قٕب‬ ‫ثطای‬ ‫ضا‬‫زٞس‬—‫تٟٙب‬ ‫٘ٛز‬"ٜ‫زاز‬ٝ٘‫ثس‬ ‫ی‬"1 ‫ٔی‬ ٓٞ‫فطا‬ ٖ‫ثطایتب‬ ‫ضا‬.‫وٙس‬‫ثطؾس‬ ‫٘ظط‬ ٝ‫ث‬ ‫٘بُّٔٛة‬ ‫اؾت‬ ٗ‫ٕٔى‬‫أب‬‫ػمبیس‬2 (‫٘ظط‬ ٝ‫ث‬ :ٜ‫ٍ٘بض٘س‬ ‫ٔی‬( ‫ػمبیس‬ ‫اظ‬ ‫ٔٙظٛض‬ ً‫ب‬‫تمطیج‬ ٝ‫و‬ ‫ضؾس‬opinions)،ٓ‫تهٕی‬‫ٌیطی‬،‫اخطا‬ ٚ‫ٔٛضز‬ ‫زض‬ٜٛ‫٘ح‬‫ی‬ٜ‫پیبز‬ِ‫ی‬‫ؾبظ‬‫ٔی‬ ٝ‫و‬ ‫اؾت‬ ُ‫ٔؿبئ‬ ‫ثطذی‬ُ‫قى‬ ٝ‫ث‬ ‫تٛا٘ٙس‬‫ٞبی‬ ٜ‫پیبز‬ ‫ٔرتّف‬)‫قٛ٘س‬ ‫ؾبظی‬ٓ‫فطی‬ ٝ‫ث‬ ‫ضا‬‫ٚضن‬‫قرم‬ ‫ٞبی‬‫ثبِث‬‫ٔی‬ ‫ٚاٌصاض‬‫یه‬ ‫ذٛز‬ ‫تب‬ ‫وٙس‬APIِِٗ‫پبیی‬ ‫ؾُح‬.‫وٙس‬ ٓٞ‫فطا‬ ‫ضا‬ ٜ‫ؾبز‬ ٚ ‫وبضآٔس‬ ‫ٔی‬ ‫ٍ٘بٞی‬ ،‫ثرف‬ ٗ‫ای‬ ‫زض‬ٗ‫ای‬ ٝ‫ث‬ ٓ‫وٙی‬‫ٔی‬ ٍٝ٘ٛ‫چ‬ ٝ‫و‬:‫زٞیس‬ ْ‫ا٘دب‬ ‫ضا‬ ‫ظیط‬ ‫وبضٞبی‬ ‫تٛا٘یس‬ ‫ث‬ ‫ضؾیسٌی‬ٜ‫قس‬ َ‫اضؾب‬ ْ‫فط‬ ‫فیّسٞبی‬ ٝ ُ‫فبی‬ ٝ‫ث‬ ‫ضؾیسٌی‬‫آپّٛز‬ ‫ٞبی‬‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬ ٜ‫قس‬formidable ٝ‫ٔحبؾج‬ٝ‫ث‬ ‫آپّٛز‬ ‫پیكطفت‬ ٖ‫ٔیعا‬ ‫ی‬ً٘‫ثالزض‬ ‫نٛضت‬ ٖٛٙ‫او‬ٜٛ‫٘ح‬ ٝ‫ث‬ٜ‫زاز‬ ‫پطزاظـ‬ ‫ی‬ْ‫فط‬ ‫ی‬‫زضیبفتی‬‫٘ٛز‬ ‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬‫ٔی‬ٓ‫پطزاظی‬. 4.4.7‫ارسال‬ ‫فرم‬ ‫فیلذّای‬ ِ‫ب‬ ‫رسیذگی‬ُ‫ضذ‬ 1 body data 2 opinions
  • 28. 11 ً‫ب‬ٕٔٛ‫ػ‬‫زض‬‫زضذٛاؾت‬‫ٞب‬‫ی‬‫ی‬‫ضا‬ ْ‫فط‬ ‫اَالػبت‬ ٝ‫و‬‫ا‬‫ٔی‬ َ‫ضؾب‬،‫وٙٙس‬Content-Type‫ٔی‬ ‫ضا‬ ‫ظیط‬ ‫ٔمساض‬ ٚ‫ز‬ ‫اظ‬ ‫یىی‬:‫ٌیطز‬ application/x-www-form-urlencoded—‫پیف‬ ‫ٔمساض‬ْ‫فط‬ ‫ثطای‬ ‫فطو‬‫ٞبی‬HTML.‫اؾت‬ multipart/form-data—‫ٔی‬ ٜ‫اؾتفبز‬ ‫ظٔب٘ی‬ٜ‫زاز‬ ‫یب‬ ،ُ‫فبی‬ ‫حبٚی‬ ْ‫فط‬ ٝ‫و‬ ‫قٛز‬ِ‫ط‬‫غی‬ ‫ٞبی‬-ASCII1 ٜ‫زاز‬ ‫یب‬ ،‫زٚزٚیی‬ ‫ٞبی‬2 .‫ثبقس‬ ٝٔ‫ثط٘ب‬ ‫ثرف‬ ٗ‫ای‬ ‫زض‬‫ٔی‬ ‫ثبظ٘ٛیؿی‬ ‫ضا‬ ‫وبضٞب‬ ‫فٟطؾت‬ ٝ‫ث‬ ٌٛ‫ٔطث‬ ‫ی‬.ٓ‫وٙی‬ ٜ‫اؾتفبز‬ ‫ٔطٚضٌط‬ ٚ ْ‫فط‬ ‫یه‬ ‫اظ‬ ‫تب‬ ٓ‫وٙی‬ٗ‫ای‬ ٝ‫و‬ ‫ظٔب٘ی‬‫یه‬ ،‫ثطؾس‬ ْ‫اتٕب‬ ٝ‫ث‬ ‫وبض‬ ٝٔ‫ثط٘ب‬‫وبضٞب‬ ‫فٟطؾت‬ ‫ثطای‬ ‫ٚة‬ ‫تحت‬ ‫ی‬)‫قٛ٘س‬ ْ‫ا٘دب‬ ‫اؾت‬ ‫لطاض‬ ٝ‫و‬ ‫(وبضٞبیی‬ُ‫قى‬ ٝ‫ٔكبث‬ ٝ‫و‬ ‫زاقت‬ ‫ذٛاٞیس‬4.5.‫ثٛز‬ ‫ذٛاٞس‬ ‫ثط٘ب‬ ٗ‫ای‬ ‫زض‬ٝٔ‫یه‬ ،switch( ‫زضذٛاؾت‬ ‫ٔتس‬ ‫ضٚی‬req.methodٝ‫ث‬ )‫ٔی‬ ٜ‫ثطز‬ ‫وبض‬‫ٔؿیط‬ ‫یه‬ ‫تب‬ ،‫قٛز‬‫یبثی‬3 .‫زٞس‬ ُ‫قى‬ ‫ضا‬ ‫زضذٛاؾت‬ ‫ثطای‬ ٜ‫ؾبز‬ٗ‫ای‬ ‫زض‬ ّٝ‫ٔؿئ‬‫ٕ٘بی‬4.5‫ٞط‬ .‫اؾت‬ ٜ‫قس‬ ٜ‫زاز‬ ٖ‫٘كب‬URLٝ‫و‬ً‫ب‬‫زلیم‬"/"‫٘جبقس‬‫پبؾد‬ ‫یه‬ ‫ثب‬"404‫٘كس‬ ‫یبفت‬"‫ٔی‬ ٝ‫ٔٛاخ‬.‫قٛز‬ُ‫فؼ‬ ‫ٞط‬HTTP‫اظ‬ ‫غیط‬ GETٚPOST ‫پبؾد‬ ‫یه‬ ‫ثب‬"400‫زضذٛاؾت‬‫٘ب‬‫ٔٙبؾت‬"‫ٔی‬ ٝ‫ٔٛاخ‬‫ضؾیسٌی‬ ‫تٛاثغ‬ .‫قٛز‬ٜ‫وٙٙس‬‫ی‬show()،add()،badRequest()ٚ ،notFound()، ٝٔ‫ازا‬ ‫زض‬ٜ‫پیبز‬ ‫ثرف‬ ٗ‫ای‬ ‫ی‬‫ٔی‬ ‫ؾبظی‬.‫قٛ٘س‬ 1 non-ASCII 2 binary 3 routing
  • 29. 11 ‫ٞطچٙس‬HTMLِ‫ٟ٘بیی‬‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬ ً‫ال‬ٕٛ‫ٔؼ‬"‫ٔٛتٛضٞبی‬‫لبِت‬"1 ‫ٔی‬ ٝ‫ؾبذت‬َ‫ٔثب‬ ،‫قٛز‬‫ٕ٘بی‬‫ٔی‬ ٜ‫اؾتفبز‬ ٝ‫ضقت‬ ٖ‫ظز‬ ‫پیٛ٘س‬ ‫اظ‬ ‫ؾبزٌی‬ ‫ثطای‬ ‫ظیط‬.‫وٙس‬ ٖ‫وطز‬ ‫ٔمساضزٞی‬ ٝ‫ث‬ ‫٘یبظی‬res.statusCodeٝ‫ث‬ ٖٛ‫چ‬ ‫٘یؿت‬‫پیف‬ ‫نٛضت‬‫ٔمساض‬ ‫فطـ‬200ٝ٘‫(٘كب‬ٝ‫نفح‬ .‫زاضز‬ ‫ضا‬ )‫ٔٛفمیت‬ ‫ی‬‫ی‬HTMLِ ُ‫حبن‬ُ‫قى‬ ‫زض‬ ‫ٔطٚضٌط‬ ‫زض‬ ٜ‫قس‬4.5.‫اؾت‬ ٜ‫قس‬ ٜ‫زاز‬ ٖ‫٘كب‬ ‫تبثغ‬notFound()‫ٔی‬ ‫ضا‬ ‫پبؾد‬ ‫قیء‬‫ضا‬ ‫ٚيؼیت‬ ‫وس‬ ٚ ،‫ٌیطز‬404ٝ٘‫ثس‬ ٚ‫ضا‬ ‫پبؾد‬ ‫ی‬"‫٘كس‬ ‫یبفت‬"ٗ‫تؼیی‬‫ٔی‬:‫وٙس‬ 1 template engine
  • 30. 151 ‫فصل‬5 ُ‫داد‬ ‫کردى‬ ُ‫رخیر‬ِ‫برًاه‬ ‫ّای‬‫ًَد‬ ‫ی‬ ‫هی‬ ‫پَضص‬ ‫فصل‬ ‫ایي‬ ِ‫ک‬ ‫هطالبی‬‫دّذ‬ ٜ‫شذیط‬ٓ‫ؾیؿت‬ ‫زض‬ ٜ‫زاز‬ ‫ی‬ٝ‫(حبفظ‬ ٝ‫حبفظ‬ ‫زض‬ ‫٘یع‬ ٚ ُ‫فبی‬ ِٖ‫ٕٞب‬ ‫یب‬ ‫انّی‬ ‫ی‬RAM) ٜ‫شذیط‬ٜ‫پبیٍب‬ ‫زض‬ ٜ‫زاز‬ ‫ی‬ٜ‫زاز‬‫ٞبی‬ُٝ‫ضاث‬ ِْٛ‫ٔطؾ‬‫ای‬1 ٜ‫شذیط‬ٜ‫پبیٍب‬ ‫زض‬ ٜ‫زاز‬ ‫ی‬ٜ‫زاز‬ُٝ‫غیطضاث‬ ‫ٞبی‬‫ای‬2 ٝٔ‫ثط٘ب‬ ْ‫تٕب‬ ً‫ب‬‫تمطیج‬ٜ‫شذیط‬ ‫اظ‬ ‫٘ٛػی‬ ٝ‫ث‬ ‫٘یبظ‬ ،ٖ‫آ‬ ‫اظ‬ ‫غیط‬ ٝ‫چ‬ ٚ ‫ٚة‬ ‫ثط‬ ‫ٔجتٙی‬ ٝ‫چ‬ ،‫ٞب‬ٝٔ‫ثط٘ب‬ ٚ ،‫زاض٘س‬ ٜ‫زاز‬ ‫ی‬‫ٔی‬ ‫٘ٛز‬ ‫ثب‬ ٝ‫و‬ ‫ٞبیی‬‫ٔؿتثٙب‬ ٜ‫لبئس‬ ٗ‫ای‬ ‫اظ‬ ‫٘یع‬ ‫ؾبظیس‬ ٜ‫شذیط‬ ‫ثطای‬ ‫ٔٙبؾت‬ ْ‫ٔىب٘یع‬ ‫یه‬ ‫ا٘تربة‬ .‫٘یؿتٙس‬‫ی‬:‫زاضز‬ ‫ثؿتٍی‬ ُٔ‫ػب‬ ‫پٙح‬ ٝ‫ث‬ ٜ‫زاز‬ ٜ‫زاز‬ ٝ‫چ‬‫ٔی‬ ‫ای‬‫قٛز‬ ٜ‫شذیط‬ ‫ذٛاٞس‬ ٜ‫زاز‬ ٝ‫و‬ ‫اؾت‬ ‫٘یبظ‬ ‫ؾطػتی‬ ٝ‫چ‬ ‫ثب‬‫قٛز‬ ‫حفظ‬ ‫ٔٙبؾت‬ ‫وبضایی‬ ‫تب‬ ‫قٛ٘س‬ ٝ‫٘ٛقت‬ ٚ ٜ‫ذٛا٘س‬ ‫ٞب‬ ‫زاضز‬ ‫ٚخٛز‬ ٜ‫زاز‬ ‫چمسض‬ ٜ‫زاز‬ ‫اظ‬ ‫ثبیس‬ ‫نٛضت‬ ٝ‫چ‬ ٝ‫ث‬‫پطؼ‬ ‫ٞب‬ٚ‫قٛز‬ ٛ‫خ‬ ٜ‫زاز‬ُ‫لبث‬ ‫چمسض‬ ٚ ‫ٔست‬ ٝ‫چ‬ ‫ثطای‬ ‫ٞب‬ٖ‫إَیٙب‬‫قٛ٘س‬ ٜ‫شذیط‬ ‫ثبیس‬ ٜٛ‫قی‬ٜ‫شذیط‬ ‫ٞبی‬ٜ‫زاز‬ ‫ٍٟ٘ساضی‬ ‫اظ‬ ،ٜ‫زاز‬ ‫ی‬ٝ‫حبفظ‬ ‫زض‬ ‫ٞب‬‫یه‬ ‫ثب‬ ٟٝ‫ٔٛاخ‬ ‫تب‬ ‫ؾطٚض‬ ‫ی‬"ٜ‫پبیٍب‬ ِ‫ت‬‫ٔسیطی‬ ِٓ‫ؾیؿت‬ٜ‫زاز‬‫ی‬"3 ُٔ‫وب‬ٜٛ‫قی‬ ْ‫تٕب‬ ‫أب‬ ،‫اؾت‬ ‫ٔتغیط‬‫ٞب‬ ٝ‫ث‬ ‫٘یبظ‬‫اظ‬ ‫٘ٛػی‬ٝ٘‫ٔٛاظ‬4 .‫زاض٘س‬ ْ‫ٔىب٘یع‬‫پب‬ ‫اظ‬ ٝ‫و‬ ‫ٞبیی‬ِ‫ی‬‫یساض‬‫َٛال٘ی‬ٜ‫زاز‬ ِ‫ت‬‫ٔس‬ٝ‫ؾبذتبضیبفت‬ ٚ ٜ‫پیچیس‬ ‫ٞبی‬‫أىب٘بت‬ ‫ثب‬ ْ‫تٛأ‬ ،ٛ‫خؿتد‬ ‫ثطای‬ ‫لسضتٕٙس‬‫ٔی‬ ‫پكتیجب٘ی‬،‫وٙٙس‬ٝٙ‫ٞعی‬ ُٕ‫ٔتح‬‫ٞبی‬ ‫ٔی‬ ‫وبضایی‬ ‫زض‬ ‫تٛخٟی‬ ُ‫لبث‬ٖ‫آ‬ ‫اظ‬ ٜ‫اؾتفبز‬ ٗ‫ثٙبثطای‬ ،‫قٛ٘س‬ٝ‫ث‬ .‫٘یؿت‬ ‫ضاٞجطز‬ ٗ‫ثٟتطی‬ ٝ‫ٕٞیك‬ ‫ٞب‬ٜ‫شذیط‬ ،ٝ‫ٔكبث‬ ‫َٛض‬ٜ‫زاز‬ ‫ی‬ٝ‫حبفظ‬ ‫زض‬ ‫ٞب‬‫ضا‬ ‫وبضایی‬ ‫ؾطٚض‬ ‫ی‬ ‫ٔی‬ ‫حساوثط‬ُ‫لبث‬ ‫وٕتط‬ ‫پبیساضی‬ ‫زاضای‬ ‫أب‬ ،‫وٙس‬‫إَیٙب٘ی‬‫ث‬ ‫اٌط‬ ٖٛ‫چ‬ ‫اؾت‬‫ذبٔٛـ‬ ٝٔ‫ط٘ب‬ٜ‫زاز‬ ‫ثطٚز‬ ‫ؾطٚض‬ ‫ثطق‬ ‫یب‬ ‫قٛز‬ ٗ‫ٚضٚق‬‫ٔی‬ ٗ‫ثی‬ ‫اظ‬ ‫ٞب‬.‫ضٚ٘س‬ ٜ‫شذیط‬ ْ‫ٔىب٘یع‬ ْ‫وسا‬ ‫اظ‬ ٝ‫و‬ ‫ٌطفت‬ ‫ذٛاٞیس‬ ٓ‫تهٕی‬ ٍٝ٘ٛ‫چ‬ ‫حبال‬ٝٔ‫ثط٘ب‬ ‫زض‬ ‫ؾبظی‬ٝ‫تٛؾؼ‬ ‫ز٘یبی‬ ‫زض‬ ‫وٙیس؟‬ ٜ‫اؾتفبز‬ ٖ‫تب‬ٝٔ‫ثط٘ب‬ ‫ی‬‫٘یؿت‬ َٕٛ‫غیطٔؼ‬ ،‫٘ٛز‬ ‫ٞبی‬ ِ‫ز‬‫ٔٛاض‬ ‫ثطای‬ ٝ‫و‬-‫ٔرتّف‬ ‫وبضثطز‬،ْ‫ٔىب٘یع‬ ‫اظ‬ٜ‫شذیط‬ ‫ٔرتّف‬ ‫ٞبی‬‫ؾب‬ٝٙ‫ٌعی‬ ٝ‫ؾ‬ ‫ٔٛضز‬ ‫زض‬ ُ‫فه‬ ٗ‫ای‬ ‫زض‬ .‫قٛز‬ ٜ‫اؾتفبز‬ ‫ظی‬‫ٔی‬ ‫نحجت‬ ‫ٔرتّف‬ ‫ی‬:ٓ‫وٙی‬ ٜ‫شذیط‬‫یه‬ ٓ‫تٙظی‬ ٚ ‫٘هت‬ ٖٚ‫ثس‬ ٜ‫زاز‬ ‫ی‬DBMS ٜ‫شذیط‬‫یه‬ ‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬ ٜ‫زاز‬ ‫ی‬DBMSُٝ‫ضاث‬‫ای‬—ٝ‫ث‬،‫ذهٛل‬MySQLٚPostgreSQL ٜ‫شذیط‬ٜ‫پبیٍب‬ ‫اظ‬ ٜ‫اؾتفبز‬ ‫ثب‬ ٜ‫زاز‬ ‫ی‬ٜ‫زاز‬‫ٞبی‬NoSQL—ٝ‫ث‬،‫ذهٛل‬Redis،MongoDBٚ ،Mongoose ُ‫فه‬ ٗ‫ای‬ ٖ‫پبیب‬ ‫زض‬ٝٔ‫ثط٘ب‬ ‫٘یبظٞبی‬ ٝ‫ث‬ ‫تب‬ ‫وٙیس‬ ٜ‫اؾتفبز‬ ‫ٔىب٘یعٟٔب‬ ٗ‫ای‬ ‫اظ‬ ٍٝ٘ٛ‫چ‬ ٝ‫و‬ ‫زا٘ؿت‬ ‫ذٛاٞیس‬.‫زٞیس‬ ‫پبؾد‬ ‫ذٛز‬ ‫ی‬ ٖ‫آؾب‬ ٝ‫ث‬ ،‫قطٚع‬ ‫ثطای‬ٗ‫پبیی‬ ٚ ٗ‫تطی‬ٜ‫شذیط‬ ‫اظ‬ ‫ؾُح‬ ٗ‫تطی‬‫ؾبظی‬‫زاضز‬ ٖ‫أىب‬ ٝ‫و‬‫ٔی‬ٜ‫شذیط‬ :ٓ‫پطزاظی‬ٜ‫زاز‬ ‫ی‬ٖٚ‫ثس‬ِ‫ؾطٚض‬5 (ٓ‫ؾیؿت‬ ‫یه‬ ‫اظ‬ ٜ‫اؾتفبز‬ ٖٚ‫ثس‬ 1 relational 2 nonrelational 3 database management system (DBMS) 4 trade-off 5 serverless
  • 31. 151 ‫ٔسیطیت‬‫و‬ٜ‫ٙٙس‬). 5.7ُ‫رخیر‬‫ا‬ ‫بذٍى‬ ُ‫داد‬ ‫ی‬‫هذیریت‬ ‫سیستن‬ ‫یک‬ ‫از‬ ُ‫ستفاد‬ُ‫کٌٌذ‬ ُٝ‫٘م‬ ‫اظ‬،ٓ‫ؾیؿت‬ ‫ٔسیطیت‬ ‫٘ظط‬‫ضاحت‬ٗ‫تطی‬ْ‫ٔىب٘یع‬ٜ‫شذیط‬ ‫ٞبی‬ٖ‫آ‬ ‫ؾبظی‬‫یه‬ ‫اظ‬ ‫ٍٟ٘ساضی‬ ٝ‫ث‬ ْ‫ّٔع‬ ‫ضا‬ ‫قٕب‬ ٝ‫و‬ ‫ٞؿتٙس‬ ‫ٞبیی‬DBMS‫ٕ٘ی‬،‫وٙٙس‬ُ‫لجی‬ ‫اظ‬ ٜ‫شذیط‬ٜ‫شذیط‬ ٚ ،ٝ‫حبفظ‬ ‫زض‬ ‫ؾبظی‬‫یه‬ ٓ‫تٙظی‬ ٚ ‫٘هت‬ ٝ‫ث‬ ‫٘یبظ‬ ‫حصف‬ .ُ‫فبی‬ ‫ثط‬ ‫ٔجتٙی‬ ‫ؾبظی‬DBMSٝٔ‫ثط٘ب‬ ‫٘هت‬ ،‫ٔی‬ ٝ‫و‬ ‫ٞبیی‬ٖ‫آؾب‬ ‫ضا‬ ‫ؾبظیس‬‫ٔی‬ ‫تط‬.‫وٙس‬ ِ‫ز‬ٛ‫ٚخ‬ ْ‫ػس‬‫یه‬DBMS،ٜ‫شذیط‬ٖٚ‫ثس‬ ٜ‫زاز‬ ‫ؾبظی‬ِ‫ضا‬ ‫ؾطٚض‬ٝٙ‫ٌعی‬ ‫یه‬ٝٔ‫ثط٘ب‬ ‫ثطای‬ ‫ٔٙبؾت‬ ‫ی‬ٖ‫آ‬ ٖ‫وبضثطا‬ ٝ‫و‬ ‫٘ٛز‬ ‫ٞبی‬‫ٞب‬‫ؾرت‬ ‫ضٚی‬ ‫ضا‬‫افعاض‬‫ذٛز‬ٖ‫قب‬ ‫وطز‬ ‫ذٛاٞٙس‬ ‫اخطا‬‫ٔی‬‫وٙس‬ٝٔ‫ثط٘ب‬ ُ‫(ٔث‬ٝٔ‫ثط٘ب‬ ‫زیٍط‬ ٚ ‫ٚة‬ ‫ٞبی‬‫ٞبی‬TCP/IPٙٔ ‫ثؿیبض‬ ٗ‫ٕٞچٙی‬ .)‫اثعاضٞبی‬ ‫ثطای‬ ‫بؾت‬1 "ٖ‫فطٔب‬ ٍ‫ذ‬ ٍ‫ٚاؾ‬"2 (CLI) ‫اثعاض‬ ‫یه‬ :‫اؾت‬CLIٜ‫شذیط‬ ٝ‫ث‬ ‫٘یبظ‬ ‫اؾت‬ ٗ‫ٕٔى‬ ‫٘ٛز‬ ‫ثط‬ ‫ٔجتٙی‬‫اظ‬ ٜ‫اؾتفبز‬ ‫ثطای‬ ٝ‫و‬ ‫٘رٛاٞس‬ ‫وبضثط‬ ً‫ال‬‫احتٕب‬ ‫أب‬ ،‫ثبقس‬ ٝ‫زاقت‬ ٜ‫زاز‬ ‫ی‬ٗ‫ای‬‫اثعاض‬‫زضٌیط‬‫ثطپبیی‬ ِ‫ض‬ٚ‫ؾط‬ ‫یه‬MySQL.‫قٛز‬ ٝ‫چ‬ ٝ‫و‬ ‫آٔٛذت‬ ‫ذٛاٞیس‬ ،‫ثرف‬ ٗ‫ای‬ ‫زض‬ٜ‫شذیط‬ ‫اظ‬ ٍٝ٘ٛ‫چ‬ ٚ ‫ٚلت‬ٜ‫شذیط‬ ٚ ٝ‫حبفظ‬ ‫زض‬ ‫ؾبظی‬ٗ‫ای‬ ‫زٚی‬ ‫ٞط‬ ٝ‫و‬ ،‫وٙیس‬ ٜ‫اؾتفبز‬ ُ‫فبی‬ ‫ثط‬ ‫ٔجتٙی‬ ‫ؾبظی‬َ‫ا‬ ‫ٞب‬َِ‫قىب‬ ٜ‫شذیط‬ ‫انّی‬‫ؾبظی‬ٖٚ‫ثس‬ِ‫ؾطٚض‬.‫ٞؿتٙس‬ٜ‫ؾبز‬ ‫ثب‬ٗ‫ای‬ ٗ‫تطی‬ٜ‫شذیط‬ ‫یؼٙی‬ ٚ‫ز‬ٔ ‫قطٚع‬ ٝ‫حبفظ‬ ‫زض‬ ‫ؾبظی‬‫ی‬.ٓ‫وٙی‬ 5.7.7ُ‫رخیر‬ِ‫حافظ‬ ‫در‬ ‫سازی‬ ٝٔ‫ثط٘ب‬ ‫زض‬َٛ‫فه‬ ‫زض‬ َ‫ٔثب‬ ‫ٞبی‬2ٚ4ٜ‫شذیط‬ ،.‫قٛز‬ ‫ٍٟ٘ساضی‬ ‫وبضٞب‬ ٚ ‫وبضثطٞب‬ ٝ‫ث‬ ٌٛ‫ٔطث‬ ‫خعئیبت‬ ‫تب‬ ‫ٌطفت‬ ‫لطاض‬ ٜ‫اؾتفبز‬ ‫ٔٛضز‬ ٝ‫حبفظ‬ ‫زض‬ ‫ؾبظی‬ٜ‫شذیط‬ ٜ‫شذیط‬ ‫ثطای‬ ‫ٔتغیطٞب‬ ‫اظ‬ ،ٝ‫حبفظ‬ ‫زض‬ ‫ؾبظی‬ٜ‫زاز‬ ‫ی‬‫ٔی‬ ٜ‫اؾتفبز‬ ‫ٞب‬ٜ‫زاز‬ ٗ‫ای‬ ٗ‫٘ٛقت‬ ٚ ٖ‫ذٛا٘س‬ .‫وٙس‬ٖ‫ٕٞب‬ ‫أب‬ ،‫اؾت‬ ‫ؾطیغ‬ ‫ٞب‬‫پیف‬ ٝ‫و‬ ‫َٛض‬ٓ‫وطزی‬ ٖ‫ثیب‬ ‫تط‬ ٜ‫زاز‬‫ذبٔٛـ‬ ٖ‫ظٔب‬ ‫زض‬ ‫ضا‬ ‫ٞب‬.‫زاز‬ ‫ذٛاٞیس‬ ‫زؾت‬ ‫اظ‬ ٝٔ‫ثط٘ب‬ ٖ‫قس‬ ٗ‫ضٚق‬ ٜ‫ایس‬ ‫وبضثطز‬ٜ‫شذیط‬ َ‫آ‬‫ثرف‬ ‫ثطای‬ ،ٝ‫حبفظ‬ ‫زض‬ ‫ؾبظی‬‫ز‬ ‫وٛچه‬ ‫ٞبی‬‫ٔی‬ ‫لطاض‬ ‫زؾتطؾی‬ ‫ٔٛضز‬ ‫ثؿیبض‬ ٝ‫و‬ ٜ‫از‬ٗ‫ای‬ ‫وبضثطز‬ ‫یه‬ .‫اؾت‬ ‫ٌیط٘س‬‫ٔی‬ ‫چٙیٙی‬‫یه‬ ‫تٛا٘س‬ ٝ‫نفح‬ ‫اظ‬ ٜ‫قس‬ ْ‫ا٘دب‬ ‫ثبظزیسٞبی‬ ‫ػسز‬ ٝ‫و‬ ‫ثبقس‬ ٜ‫قٕبض٘س‬( ‫ضا‬ٜ‫وطز‬ ‫وبض‬ ٝ‫ث‬ ‫قطٚع‬ ٝٔ‫ثط٘ب‬ ٝ‫و‬ ٝ‫ٔطتج‬ ٗ‫آذطی‬ ٖ‫ظٔب‬ ‫اظ‬‫ٔی‬ ‫ٍٟ٘ساضی‬ )‫ظیط‬ ‫وس‬ ،َ‫ٔثب‬ ‫ثطای‬ .‫وٙس‬ ٜ‫زضٌب‬ ‫ضٚی‬ ‫ضا‬ ‫ٚة‬ ِ‫ض‬ٚ‫ؾط‬ ‫یه‬8888‫ٔی‬ ٜ‫ضا‬‫و‬ ‫ا٘ساظز‬‫زضذٛاؾت‬ ‫تؼساز‬ ٝ‫ٔی‬ ‫ضا‬ ‫ٞب‬:‫قٕطز‬ ٝٔ‫ثط٘ب‬ ‫ثطای‬ٜ‫شذیط‬ ٝ‫ث‬ ‫٘یبظ‬ ٝ‫و‬ ‫ٞبیی‬‫ذبٔٛـ‬ ‫اظ‬ ُ‫ٔؿتم‬ ‫ثتٛا٘ٙس‬ ٝ‫و‬ ‫زاض٘س‬ ‫اَالػبتی‬ ‫ؾبظی‬ٜ‫شذیط‬ ،‫ثٕب٘ٙس‬ ‫پبیساض‬ ‫ؾطٚض‬ ٚ ٝٔ‫ثط٘ب‬ ٖ‫قس‬ ٗ‫ضٚق‬‫ثط‬ ‫ٔجتٙی‬ ‫ؾبظی‬ ‫ٔٙبؾت‬ ‫اؾت‬ ٗ‫ٕٔى‬ ُ‫فبی‬.‫ثبقس‬ ‫تط‬ 5.7.2ُ‫رخیر‬‫فایل‬ ‫بر‬ ‫هبتٌی‬ ‫سازی‬ ٜ‫شذیط‬ُ‫فبی‬ ‫ثط‬ ‫ٔجتٙی‬ ‫ؾبظی‬ٜ‫شذیط‬ ‫ثطای‬ ُ‫فبی‬ ِٓ‫ؾیؿت‬ ‫اظ‬ٜ‫زاز‬ ‫ی‬‫ٔی‬ ٜ‫اؾتفبز‬ ‫ٞب‬.‫وٙس‬ٝ‫تٛؾؼ‬ٜ‫شذیط‬ ‫٘ٛع‬ ٗ‫ای‬ ‫اظ‬ ‫اغّت‬ ٖ‫زٞٙسٌب‬‫اَالػبت‬ ‫ثطای‬ ‫ؾبظی‬ ‫ٔی‬ ٜ‫اؾتفبز‬ ٝٔ‫ثط٘ب‬ ‫تٙظیٕبت‬ٜٚ‫ػال‬ ‫أب‬ ،‫وٙٙس‬‫ٔی‬ ٜ‫اخبظ‬ ‫قٕب‬ ٝ‫ث‬ ٖ‫ثطآ‬ٜ‫زاز‬ ‫آؾب٘ی‬ ٝ‫ث‬ ٝ‫و‬ ‫زٞس‬ٝ‫ث‬ ‫وٙیس‬ ‫پبیساض‬ ‫ضا‬ ‫ٞبیی‬‫ذبٔٛـ‬ ‫ثب‬ ٝ‫و‬ ‫٘حٛی‬ٝٔ‫ثط٘ب‬ ٖ‫قس‬ ٗ‫ضٚق‬ ‫پ‬ ‫ؾطٚض‬ ‫یب‬.‫٘كٛ٘س‬ ‫بن‬ 1 tools 2 command line interface (CLI)