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, 18:50
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

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

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

Сообщение от Audaxviator Посмотреть сообщение
Тем более что из взятого вне контекста, одно этого модуля - ничего не понятно по существу сабжа.
Так модули на то и модули, чтобы иметь зависимости (require) в виде других модулей, а не быть представлены все в одном месте, если проследуешь по цепочке зависимостей http -> _http_server -> net -> events, то окажешься в нужном тебе контексте, а именно events.js#L125.
Ответить с цитированием
  #9 (permalink)  
Старый 30.05.2017, 21:09
Профессор
Отправить личное сообщение для Audaxviator Посмотреть профиль Найти все сообщения от Audaxviator
 
Регистрация: 28.04.2017
Сообщений: 214

Спасибо, Кэп.
Ответить с цитированием
  #10 (permalink)  
Старый 30.05.2017, 21:25
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Audaxviator, как видишь класса там не наблюдается.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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