Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.05.2017, 17:54
Новичок на форуме
Отправить личное сообщение для Rora Посмотреть профиль Найти все сообщения от Rora
 
Регистрация: 09.05.2017
Сообщений: 6

Глупый вопрос по Node js
В книгах написано, что сервер создается вызовом метода createServer()
var http = require("http");
 
http.createServer().listen(3000);

Для обработки событий, в вышеуказанный метод передается функция
http.createServer(function(request, response){
     
});

параметрами которой в свою очередь служат два объекта reqest и response.
Вопрос: как эти параметры попадают в функцию?
Ответить с цитированием
  #2 (permalink)  
Старый 25.05.2017, 18:37
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

В смысле "как попадают"? Внутри "http.createServer" вызывается переданный Вами callback и в него передаются параметры.

var my = function(callback) {
   callback(123, 456);
};


my(function(a, b) {
   console.log(a, b);
});
Ответить с цитированием
  #3 (permalink)  
Старый 26.05.2017, 17:18
Новичок на форуме
Отправить личное сообщение для Rora Посмотреть профиль Найти все сообщения от Rora
 
Регистрация: 09.05.2017
Сообщений: 6

Если я правильно понимаю,то вы в функции
var my = function(callback) {
   callback(123, 456); // вызов функции с аргументами
};

руками прописываете параметры callback функции описанной ниже.
my(function(a, b) {
   console.log(a, b);
});

Когда же мы создаем обьект сервера, мы не передаем аргументы руками. Reqest & responce как-то формируются Нодой, и передаются в метод http.createServer(), а точнее в его callback функцию:
http.createServer(function(request, response){
      
});


Если я все верно понял, то вопрос:
Как формируются эти обьекты reqest & responce, и благодаря чему они передаются как аргументы сallback функции?
Ответить с цитированием
  #4 (permalink)  
Старый 27.05.2017, 22:08
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

http://learn.javascript.ru/function-basics#параметры
http://learn.javascript.ru/custom-events#коллбэки
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #5 (permalink)  
Старый 30.05.2017, 11:43
Профессор
Отправить личное сообщение для Audaxviator Посмотреть профиль Найти все сообщения от Audaxviator
 
Регистрация: 28.04.2017
Сообщений: 214

Примерно вот так попадают.
Не знаю, как там внутри выглядить нативный модуль http, но допустим, чисто схематически как-то так:

class Http {
	constructor(req, res) {
		this.req = req;
		this.res = res;
	}

	createServer(func) {
		func(this.req, this.res);
	}
}

const http = new Http({	url: '/' },
				      { write: (s) => console.log(s) });


И теперь пишем знакомые буквы:

http.createServer(function(req, res) {
	if(req.url == '/')
		res.write('Hello, World!');
});


Запущеный код пишет Hello World в консоль - будем считать это ответом сервера. Гы!
(извините, это я попробовал, как тут с кодом сообщения пейсать - щас погляжу, что вышло)

Последний раз редактировалось Audaxviator, 30.05.2017 в 11:49.
Ответить с цитированием
  #6 (permalink)  
Старый 30.05.2017, 19:48
Профессор
Отправить личное сообщение для Audaxviator Посмотреть профиль Найти все сообщения от Audaxviator
 
Регистрация: 28.04.2017
Сообщений: 214

Хе! Наверное, мне надо было добавить - "да и незачем это знать".
Тем более что из взятого вне контекста, одно этого модуля - ничего не понятно по существу сабжа.
Ответить с цитированием
  #7 (permalink)  
Старый 30.05.2017, 21:09
Профессор
Отправить личное сообщение для Audaxviator Посмотреть профиль Найти все сообщения от Audaxviator
 
Регистрация: 28.04.2017
Сообщений: 214

Спасибо, Кэп.
Ответить с цитированием
  #8 (permalink)  
Старый 30.05.2017, 21:50
Профессор
Отправить личное сообщение для Audaxviator Посмотреть профиль Найти все сообщения от Audaxviator
 
Регистрация: 28.04.2017
Сообщений: 214

Хосподи, ну давай я без класса то же самое напейшу, и без стрелочек:

function Http(req, res) {
	this.req = req;
	this.res = res;
}
Http.prototype.createServer = function(func) {
						func(this.req, this.res);
					};

var http = new Http({	url: '/' },
			    { write: function(s) {console.log(s);} });
										
module.exports = http;


И ещё модуль экспортирую, разделю на два файла (чтоб было попохожее), положу его рядом и назову http.js, и основной тогда будет такой:

var http = require('./http');

http.createServer(function(req, res) {
	if(req.url == '/')
		res.write('Hello, World!');
});


И ты не поверишь, но результат будет тот же.

Последний раз редактировалось Audaxviator, 30.05.2017 в 22:01.
Ответить с цитированием
  #9 (permalink)  
Старый 30.05.2017, 22:53
Профессор
Отправить личное сообщение для Audaxviator Посмотреть профиль Найти все сообщения от Audaxviator
 
Регистрация: 28.04.2017
Сообщений: 214

Кому посмотреть, зачем посмотреть?
У человека был нормальный, хороший вопрос - как в колбэк попадают параметры запроса и ответа? Поскольку мне, старику, делать нечего, то я и подумал - это ж какой-то не сложный механизм? Ну и попытался сам принцип изобразить (заодним приучая себя к новому "сахарному" синтаксису моего почти любимого языка). И потом, я же не "профессор", я сам на старости лет эту науку только осваиваю (не совсем понятно, за каким хером, - в этой стране нужны только программисты PHP и 1С, а про Ноду тут никто почти и не знает).

А существо принципа заключается в повсеместном использовании в javascript анонимных функций и анонимных объектов. И это же касается не только объектов запроса и ответа, а параметров вообще всех колбэков, "лапша" из которых так пугает PHP-шников и прочих всяких явистов. Короче, это "былинная земля под названием Лямбда Окраинная".
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Node js и 1C ozilmesut Node.JS 4 15.02.2016 21:48
Шаблон проектирования для JS и Node pnp2000 Общие вопросы Javascript 4 24.01.2016 09:25
Помогите исправить ошибку. node js (tradebot) xOxXakerxOx Node.JS 0 22.12.2015 10:18
Wanted! Node JS programmer with math & encryption background Job.1920 Работа 0 28.04.2015 09:17
Очень глупый вопрос для очистки совести (google analytics) shaltay Events/DOM/Window 0 04.05.2011 12:01