Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.10.2014, 13:38
kyb kyb вне форума
Новичок на форуме
Отправить личное сообщение для kyb Посмотреть профиль Найти все сообщения от kyb
 
Регистрация: 09.10.2014
Сообщений: 8

Тормозит простяцкий пример сервера на Node.js
В книге Пауэрс "Изучаем Node.js" листинг 1.4:
var http = require('http');
var fs = require('fs');

var counter = 0;

/// запись чисел
function writeNums(res) {
	//var counter = 0;

	/// глобальное приращение значения, запись для клиента
	for( i=0; i<100; i++) {
		counter++;
		res.write(counter.toString() + '\n');
	}
}

http.createServer( function(req, res) {

	var querry = require('url').parse(req.url).query;
	var app = require('querystring').parse(querry).file + ".txt";
	//console.log('app: ' + app);

	/// заголовок контента
	res.writeHead(200, {'content-type': 'text/plain'});
	/// запись чисел
	writeNums(res);

	/// установка таймера на открытие файла и чтение его контента
	setTimeout( function() {
		console.log('opening ' + app);
		/// открытие файла и чтение содержимого
		fs.readFile(app, 'utf8', function(err, data) {
			if (err)
				res.write('Could not find or open file for reading.\n');
			else
				res.write(data);
			res.end;
		})
	}, 2000)
}).listen(8888);

console.log('Listening on 8888.')


Вводим в браузер http://localhost:8888/?file=main
Очень долго думает браузер, почти несколько минут. Потом выдает числа от 1 до 100 и содержимое файла main.txt (как ожидалось). Без SetTimeout и записи чисел всё работает мгновенно.
Полагаю проблема в коде и асинхронности Node. В книге об этом ничего.
Ответить с цитированием
  #2 (permalink)  
Старый 09.10.2014, 14:07
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

В 37-й строчке нужно вызывать метод:
res.end();
Ответить с цитированием
  #3 (permalink)  
Старый 09.10.2014, 14:51
kyb kyb вне форума
Новичок на форуме
Отправить личное сообщение для kyb Посмотреть профиль Найти все сообщения от kyb
 
Регистрация: 09.10.2014
Сообщений: 8

( Да уж. Java и Си такое не допустили бы.
Посоветуйте средство, которое выдавало бы warning'и.
Ответить с цитированием
  #4 (permalink)  
Старый 09.10.2014, 15:49
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

kyb, так тут нет по сути никакой ошибки. Вы просто получили сам метод, но не вызвали его.
Ответить с цитированием
  #5 (permalink)  
Старый 09.10.2014, 16:10
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от Ruslan_xDD
так тут нет по сути никакой ошибки. Вы просто получили сам метод, но не вызвали его.
На самом деле, тут очевидно что-то не так, поскольку это не геттер, и эта функция никуда не передаётся и не присваивается. Например, phpStorm выдаёт в таком случае warning "Expression statement is not assignment or call".
Ответить с цитированием
  #6 (permalink)  
Старый 14.10.2014, 16:11
kyb kyb вне форума
Новичок на форуме
Отправить личное сообщение для kyb Посмотреть профиль Найти все сообщения от kyb
 
Регистрация: 09.10.2014
Сообщений: 8

Я так понял js ошибки выдает только в исключительнейших ситуациях. Никакой строгой типизации, что кому хошь, то и присваивай, или строку с числом и с булем сравнивай, или безтолковые действия делай, типа получил сам метод и никуда не дел его. По-моему это не очень правильно.
Цитата:
так тут нет по сути никакой ошибки. Вы просто получили сам метод, но не вызвали его.
Может для js и нет а для моей "бузнесс-логики" очень даже ошибка.
Ответить с цитированием
  #7 (permalink)  
Старый 14.10.2014, 16:21
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

kyb,
Попробуйте пользовать TypeScript, может поможет
Ответить с цитированием
  #8 (permalink)  
Старый 14.10.2014, 16:42
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
( Да уж. Java и Си такое не допустили бы.
Уверен?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Правильное использование сервера node.js cyber AJAX и COMET 30 18.05.2013 00:44
Не удается выполнить пример из учебника (Node.JS для решения задач) Drygba AJAX и COMET 9 13.04.2013 15:19
Востребованность разработчиков на Node.js danik.js AJAX и COMET 7 08.12.2012 22:49
"success" и "failure" приём данных с сервера ??? potkin ExtJS 8 30.05.2012 09:27