Javascript.RU

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

Не удается выполнить пример из учебника (Node.JS для решения задач)
Добрый день,
дошел до раздела AJAX и сразу застрял.
Установил все как по инструкции:
1. node.js
2. модуль node-static
Создал файл server.js и скопировал туда приведенный код. Запустил из папки с server.js, node server.js - запустилось. Но, как написано далее: Откройте в браузере http://127.0.0.1:8080/server.js.
Должно вывести код файла server.js.
Не чего не выводит, ожидание ответа и все. Хотя если добавить в код строчку
console.log(req.url);
видно в консоле что запрос на сервер пошел.
Думал, не чего страшного и далее разберусь - не удалось.
Следующая задача. Просто голосовалка.
Запускаем сервер, жмем кнопку Голосовать и получаем ошибку
XMLHttpRequest cannot load file:///D:/vote. Cross origin requests are only supported for HTTP. index.html:1
Uncaught Error: NETWORK_ERR: XMLHttpRequest Exception 101

Исправляем строку
xhr.open('GET', '/vote', true);
на
xhr.open('GET', 'vote', true);

наблюдаем ошибку
XMLHttpRequest cannot load file:///D:/JavaScript/Project/TestNode/vote. Cross origin requests are only supported for HTTP. index.html:27
Uncaught Error: NETWORK_ERR: XMLHttpRequest Exception 101

Прописываем прямой путь http://127.0.0.1:8080/vote (просто на этот адрес заходит) и наблюдаем ошибку
XMLHttpRequest cannot load http://127.0.0.1:8080/vote. Origin null is not allowed by Access-Control-Allow-Origin.
Где я наступаю на тормоз? Подскажите пожалуйста
Ответить с цитированием
  #2 (permalink)  
Старый 12.04.2013, 12:43
Аватар для SkyLight
Злюка-бобер
Отправить личное сообщение для SkyLight Посмотреть профиль Найти все сообщения от SkyLight
 
Регистрация: 21.03.2010
Сообщений: 438

Сообщение от Drygba
file:///D:/JavaScript/Project/TestNode/vote
А зачем вы используете локальные пути? У вас ведь есть сервер.
Собственно, из-за этого у вас и проблема
__________________
In WEB We Trust
У всех есть своя темная сторона...
Ответить с цитированием
  #3 (permalink)  
Старый 12.04.2013, 13:33
Интересующийся
Отправить личное сообщение для Aves Посмотреть профиль Найти все сообщения от Aves
 
Регистрация: 14.12.2011
Сообщений: 12

На днях вышла новая версия nodejs, исправления node-static под нее похоже только вчера добавили - https://github.com/cloudhead/node-static/pull/93, стоит попробовать обновить этот модуль - npm update node-static, должно заработать.

А по следующей задаче - наверное открываете index.html из проводника, вместо того, чтобы в браузере открыть http://localhost:8080
Ответить с цитированием
  #4 (permalink)  
Старый 12.04.2013, 13:47
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от Aves
А по следующей задаче - наверное открываете index.html из проводника, вместо того, чтобы в браузере открыть http://localhost:8080
Сообщение от Drygba
Откройте в браузере http://127.0.0.1:8080/server.js.
а у localhost адреса нет разве?
http://ru.wikipedia.org/wiki/Localhost
Ответить с цитированием
  #5 (permalink)  
Старый 12.04.2013, 14:00
Новичок на форуме
Отправить личное сообщение для Drygba Посмотреть профиль Найти все сообщения от Drygba
 
Регистрация: 11.04.2013
Сообщений: 4

Сообщение от SkyLight Посмотреть сообщение
У вас ведь есть сервер.
как бы да, но он не хочет понимать меня

Сообщение от Aves Посмотреть сообщение
стоит попробовать обновить этот модуль - npm update node-static, должно заработать.
не заработало
Сообщение от Aves Посмотреть сообщение
А по следующей задаче - наверное открываете index.html из проводника, вместо того, чтобы в браузере открыть http://localhost:8080
угу, открывал из проводника, при попытке http://localhost:8080 или http://localhost:8080/index.html не чего стоящего не происходит, запрос на сервер идет - ответа нет (так как не обрабатывается в коде не как).
структура
папка Test
|______node_modules(тут модуль node-static)
|index.js
|index.html
код index.js
var http = require('http');
var static = require('node-static');
var file = new static.Server('.');
console.log(file.root);

http.createServer(function (req, res) {
    console.log(req.url);//выводим путь куда стучимся
	if (req.url == '/vote') {
		res.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'});

		var now = new Date();
		var timeStr = now.getHours()+':'+now.getMinutes()+':'+now.getSeconds();

		res.end('Голос принят ' + timeStr);
		return;
	}
    if (req.url == '/test'){
        res.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'});
        res.write('test ok');
        res.end();
    }
	req.addListener('end', function () {
        file.serve(req, res);
    });

}).listen(8080);

попытки зайти через браузер на адреса:
localhost:8080
localhost:8080/index
localhost:8080/index.html
localhost:8080/vote
localhost:8080/test
обрабатывается только последних два запроса
Сообщение от Лог консоли
D:\JavaScript\Project\TestNode
/
/index
/index.html
/vote
/favicon.ico
/test
/favicon.ico
/favicon.ico
Ответить с цитированием
  #6 (permalink)  
Старый 12.04.2013, 21:49
Интересующийся
Отправить личное сообщение для Aves Посмотреть профиль Найти все сообщения от Aves
 
Регистрация: 14.12.2011
Сообщений: 12

Не знаю, как в Windows обновлять модули nodejs. У меня на днях тоже переставал node-static работать, сегодня заработал. Попробуйте может всё полностью удалить и заново поставить. Потому что всё остальное не работает именно из-за этого модуля - он отдает статические файлы по http, в том числе должен отдавать index.html по http://localhost:8080 . А остальной код перехватывает только обращения на прописанные адреса - vote и test.
Ответить с цитированием
  #7 (permalink)  
Старый 12.04.2013, 22:26
Новичок на форуме
Отправить личное сообщение для Drygba Посмотреть профиль Найти все сообщения от Drygba
 
Регистрация: 11.04.2013
Сообщений: 4

Сообщение от Aves Посмотреть сообщение
Не знаю, как в Windows обновлять модули nodejs. У меня на днях тоже переставал node-static работать, сегодня заработал. Попробуйте может всё полностью удалить и заново поставить. Потому что всё остальное не работает именно из-за этого модуля - он отдает статические файлы по http, в том числе должен отдавать index.html по http://localhost:8080 . А остальной код перехватывает только обращения на прописанные адреса - vote и test.

удалил node с модулями, скачал новую, поставил - результат тот же.
Я правильно понимаю что если бы все работало то по адресу http://localhost:8080/index.html я увидел бы свою страницу?
Ответить с цитированием
  #8 (permalink)  
Старый 13.04.2013, 00:58
Интересующийся
Отправить личное сообщение для Aves Посмотреть профиль Найти все сообщения от Aves
 
Регистрация: 14.12.2011
Сообщений: 12

Обнаружил, что изменения более глобальны. Чтобы заработало, нужно добавить req.resume() в http.createServer... - https://github.com/joyent/node/blob/...#compatibility

И да, этот модуль нужен только для того, чтобы удобно отдавать статические файлы, html, css, js, картинки и т.д.

Последний раз редактировалось Aves, 13.04.2013 в 01:05.
Ответить с цитированием
  #9 (permalink)  
Старый 13.04.2013, 10:09
Новичок на форуме
Отправить личное сообщение для Drygba Посмотреть профиль Найти все сообщения от Drygba
 
Регистрация: 11.04.2013
Сообщений: 4

огромное спасибо, все заработало после добавления req.resume()
Ответить с цитированием
  #10 (permalink)  
Старый 13.04.2013, 15:19
Аватар для Илья Кантор
Администратор
Отправить личное сообщение для Илья Кантор Посмотреть профиль Найти все сообщения от Илья Кантор
 
Регистрация: 25.05.2007
Сообщений: 1,221

Были изменения в ноде. Я обновлю учебник на днях, чтобы он соответствовал последней версии.
Ответить с цитированием
Ответ



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

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