Skip to content

Instantly share code, notes, and snippets.

@tuvshuud
Last active January 6, 2020 02:48
Show Gist options
  • Save tuvshuud/8516497 to your computer and use it in GitHub Desktop.
Save tuvshuud/8516497 to your computer and use it in GitHub Desktop.
NodeJS ийн тухай

Сайн байна уу? NodeJS ийн модуль систем, routing хийх талаар жаахан юм бичлээ.

Модуль Систем /олон js файл функц ууд хоорондоо харилцах/ Дан ганц .js файл д бүх кодоо чихээд байлтай биш хувааж үзье. Application бүтэц дараах байдлаар /жишээ/ -server.js -router.js -app.js //серверийн эхлэл

require() функц ийг http server жишээ нь дээр харсан байх. Энэ функц нь NodeJS ийн Модуль Системийн нэг функц бөгөөд эхний parameter дэх js файлыг уншаад тухайн javascript ийн exports гэсэн object ийг буцаадаг. exports гэх object нь Module System ээс цаанаасаа үүсгэгддэг. Ойлгомжгүй байвал дараах жишээнээс Тодорхой болох байх.

//файл: app.js
var rectangular = require('./rect'); //rect.js ийг уншина ./ гэдэг нь одоогийн байгаа directory гэсэн үг.
console.log(rectangular.values.a);
console.log(rectangular.values.b);
console.log(rectangular.values.a * rectangular.values.b);
//файл: rect.js
var values = { //Жишээ болгох json дата; тэгш өнцөгтийн урт өргөн хоёр
	a: 300,
	b: 400
}
exports.values = values; //app.js дотор require функц ээр дуудахад одоо энэ values гэсэн json data буцаагдах нь

Цаашлаад ийм байсан ч болно.

//файл: app.js
var rectangular = require('./rect'); 
console.log(rectangular.area(30 * 20));

//файл: rect.js
var area = function(a, b){
	return a * b;
}
exports.area = area;

За модуль систем нь яаж ажиллаж байгаа нь ойлгомжтой бол нөгөө энгийн http server ээ хувааж үзье.

Routing - ямар хандалт өгсөнөөр нь ялгаж ямар хариу өгөх вэ гэдгийг чиглүүлэх Мэдээж ямар хандалт өгсөн талаарх мэдээл http ийн request обьект д байгаа.

http://localhost:8888/start?foo=bar гэж хандалт өгвөл request.url нь /start?foo=bar гэсэн string буцаана. Үүнийг задлахын тулд NodeJS ийн url модуль ийн parse функц хэрэг болно. Харин foo=bar&hello=world гэсэн датаг задлахад querystring модуль ийн parse() хэрэглэгдэнэ. Ингээд салгаад авчихвал route хийхэд бэлэн боллоо.

   url.parse(string).query
                                           |
           url.parse(string).pathname      |
                       |                   |
                       |                   |
                     ------ -------------------
http://localhost:8888/start?foo=bar&hello=world
                                ---       -----
                                 |          |
                                 |          |
              querystring(string)["foo"]    |
                                            |
                         querystring(string)["hello"]

Нэг string ийн хэдэн үйлдэл гүйцэтгэх web application бэлдсэн байгаа. Энэ дээр тэгээд тайлбарлаад явъя.

//файл: app.js
var server = require('./server');
var router = require('./router');

server.start(router); //server.js дотор start гэх функ байгаа бөгөөд үүнийг дуудсанаар сервер
							  //ачааллаж эхэлнэ. Манай серверт маань router хэрэгтэй учир router ийг
							  //дамжууллаа.
//end of app.js
//файл: server.js
var http = require('http'); 
var url = require('url'); //нөгөө яриад байсан 2 модуль
var querystring = require('querystring'); //нөгөө яриад байсан 2 модуль

var start = function(router){
	http.createServer(function(request, response){

		var parsedUrl = url.parse(request.url); //url ийн parse function яана гэлээ??

		var pathname = parsedUrl.pathname; //parse хийгдсэн url дотор pathname гэж байгаа.
										   //үзмээр байвал console.log(parsedUrl);
		var params = querystring.parse(parsedUrl.query); //query д нь нөгөө Get дата ууд байгаа
										   //foo=bar&hello=world гэх хэлбэрт. Querystring.parse() нь
										   //задлаад params.foo, params.hello гэж хандаж болохоор JSON
										   //дата болгоод өгнө.
		
		console.log('Request: ' + pathname);

		var done = function(value){ //router ажлаа хийж дуусахаар дуудагдах callback функц
			response.writeHead(200, {'Content-Type':'text/html'}); //router нь зохих string үйлдлийг 
															//хийгээд буцаана. Тэр утга нь эхний param 
															//болох value болно.
			response.write('<h1>' + value + '</h1>');
			response.end();
		}

		router.process(pathname, params, done); //router ийн гол ажиллах process гэх функц байгаа

		
	}).listen(8888);
	console.log('Server has started! Listening on port 8888');
}

exports.start = start; //Ингэснээр app.js дотор сервер ийг start() функц ээр дуудаж ажилуулах боломжтой 
					   //боллоо
//end of server.js
//файл: router.js
var operations = { //нэг ийм dummy model бичээд бэлдчихье. operations['/split']('namaig huvaa') 
				   //гэвэл n,a,m,a,i,g,h,u,v,a,a гэж буцаах гэх мэт.
		'/reverse': function(txt){
			return txt.split("").reverse().join("");
		},
		'/split': function(txt){
			return txt.split("").join();
		},
		'/say': function(txt){
			return txt;
		},
		'/uppercase': function(txt){
			return txt.toUpperCase();
		}
}

//router функц д дамжигдах parameter үүд ойлгомжтой биз.
//тэр goback нь callback функц.

var router = function( pathname, params, goback){
	console.log('Routing to ' + pathname);
	
	//operations д байгаа үйлдлүүдээс гадуур юм ороод ирвэл
	//яах вэ гээд шалгаж байна.
	if(typeof(operations[pathname]) == 'undefined'){
		goback(pathname + ' baihgui ee');
		return 0;	
	}

	//хэрвээ мөн бол бас txt гэсэн parameter өгсөн үгүйг мэдье. 
	if(! params.txt ){
		goback('txt parameter is missing');
	}

	//шалгаад дууссан бол process хийгээд буцаая.
	//манайхаар pathname / зам / нь үйлдэл ийн нэр байгааг анзаарсан байх 
	goback(operations[pathname](params.txt));
}

exports.process = router; //router функц ээ process гээд экспорт хийчихье. 

Одоо сервер ээ асаагаад шалгаж үзвэл -http://localhost:8888/say?txt=mongolia mongolia -http://localhost:8888/reverse?txt=mongolia ailognom -http://localhost:8888/uppercase?txt=mongolia MONGOLIA -http://localhost:8888/split?txt=mongolia m,o,n,g,o,l,i,a

Энгийн routing нэг иймэрхүү. Advanced routing ийг тэгээд өөрөө regex ашиглаад хийчих байлгүй дээ тэ? :) Дараагынхаар юу бичих үү?

-Express JS MVC framework /Энгийн realtime блог хийх/ -Socket.io /Олон өрөөтөй чат хийх/ -Mongoose Object Modelling /MongoDB тэй ажиллаж үзэх/

-KnockoutJS ийг хамааруулна яваандаа.

@Baysgalan
Copy link

Эхлэн сурж байгаа хүмүүсд их гоё хичээл байна аа MongoDB -тэй ажиллах хичээлээ хийгээд өгөөч тэгэхүү? Амжилт

@Hutagt
Copy link

Hutagt commented Jan 21, 2016

Mashid taalagdlaa. bayarlalaa.

@zulaa0722
Copy link

Eniig tsaashaa urgeljluuleed yavbal ih l bayrlah geed bnaa hehe

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment