
13.05.2013, 01:39
|
 |
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
Отправка запроса nodejs
Запустил node.js, прочитал статью , сделал пример и снова облом)
<!DOCTYPE HTML>
<html>
<head><meta charset="utf-8"></head>
<body>
<button onclick="vote(this)">Голосовать!</button>
<script>
function vote(outputElem) {
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://127.0.0.1:8080/index.js', true);
xhr.onreadystatechange = function() {
if (xhr.readyState != 4) return;
if (xhr.status != 200) {
// обработать ошибку
alert('Ошибка ' + xhr.status + ': ' + xhr.statusText);
return;
}
// обработать результат
outputElem.innerHTML = xhr.responseText;
}
xhr.send(null);
}
</script>
</body>
</html>
код index.js
var http = require('http');
var static = require('node-static');
var file = new static.Server('.');
http.createServer(function (req, res) {
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;
}
file.serve(req, res);
}).listen(8080);
пробывал вместо
xhr.open('GET', 'http://127.0.0.1:8080/index.js', true);
писать (файлы в одной папке)
xhr.open('GET', 'index.js', true);
но все равно не работает .
в консоле
или
Цитата:
|
XMLHttpRequest cannot load file:///C:/nodeJSProjects/test/index.js. Cross origin requests are only supported for HTTP.
|
почему не может загрузить файл?
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|

13.05.2013, 04:06
|
 |
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
хм, вроде работает если открывать index файл так http://127.0.0.1:8080/index.html
но теперь вместо содержимого timeStr возвращает код файл index.js)
И еще не могу понять почему когда меняю кол файл index.js загружается , если бы он просто кешировался браузером то он бы не был одинаковый во всех браузерах...
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
Последний раз редактировалось cyber, 13.05.2013 в 04:31.
|
|

13.05.2013, 05:44
|
 |
Аспирант
|
|
Регистрация: 23.06.2011
Сообщений: 44
|
|
Код:
|
http://127.0.0.1:8080/index.js |
Не надо /index.js. Просто к адресу (ну или адресу с портом, в данном случае):
Код:
|
http://127.0.0.1:8080/ |
Обращение же идет к серверу, запущенному на неком порту.
И да, js-файлы бэкенда не надо располагать в document_root виртуального хоста 
|
|

13.05.2013, 09:41
|
 |
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
tropiko,
я пробывал и так
xhr.open('GET', 'index.js', true);
но не работает
Цитата:
|
XMLHttpRequest cannot load file:///C:/nodeJSProjects/test/index.js. Cross origin requests are only supported for HTTP. index.html:1
Uncaught Error: NETWORK_ERR: XMLHttpRequest Exception 101
|
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|

13.05.2013, 10:14
|
 |
Аспирант
|
|
Регистрация: 23.06.2011
Сообщений: 44
|
|
cyber, зачем вы упорно обращаетесь к файлу? По аналогии с PHP
тут не получится
Надо с начала.
Создаем файл "server.js"
var http = require('http');
http.createServer(function (req, res){
if(req.url == '/vote'){
res.writeHead(200, {'Content-Type': 'text/plain;'});
var now = new Date();
var timeStr = now.getHours() + ':' + now.getMinutes() + ':'+now.getSeconds();
res.end('Голос принят: ' + timeStr);
}
else{
res.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'});
res.end('Hello World!');
}
}).listen(8080, '127.0.0.1');
console.log('Server running at http://127.0.0.1:8080/');
Сохраняем. В директории с "server.js" к консоли (в случае винды -- cmd.exe)
Заходим браузером по адресу : http://127.0.0.1:8080/
Далее, надеюсь, все понятно станет.
|
|

13.05.2013, 13:51
|
 |
Профессор
|
|
Регистрация: 23.09.2010
Сообщений: 247
|
|
да роутер для сервера в ноде надо самому писать или использовать express
__________________
На начальном этапе события могут казаться случайными, но постепенно проявляется связь, и в конце концов все части целого складываются
|
|

13.05.2013, 16:00
|
 |
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
tropiko, это все понятно, я так и делал, кроме того зачем использовать if(req.url == '/vote')
когда я перехожу по http://127.0.0.1:8080/ я вижу "Hello world" но когда я передаю в скрипт тот же http://127.0.0.1:8080/ получаю ошибку.
сори что туплю...
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|

13.05.2013, 16:30
|
 |
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
хм,
добавил console.log
http.createServer(function (req, res){
console.log("1");// тут
if(req.url == '/vote'){
res.writeHead(200, {'Content-Type': 'text/plain;'});
var now = new Date();
var timeStr = now.getHours() + ':' + now.getMinutes() + ':'+now.getSeconds();
res.end('Голос принят: ' + timeStr);
}
else{
res.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'});
res.end('Hello World!');
}
}).listen(8080, '127.0.0.1');
и при нажатие на кнопку в консоль выводит 1 , значит запрос все таки отправляется, но ошиба все равно осталась
Цитата:
|
XMLHttpRequest cannot load http://127.0.0.1:8080/. Origin null is not allowed by Access-Control-Allow-Origin.
|
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|

13.05.2013, 16:38
|
 |
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
добавил заголовок в файл server.js
res.header("Access-Control-Allow-Origin", "*");
получил такую ошибку
GET [url]http://127.0.0.1:8080/[/url]
и начал падать node js)
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
Последний раз редактировалось cyber, 13.05.2013 в 16:41.
|
|

13.05.2013, 17:01
|
 |
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
Все решил, проблема была не в настройке node js , а в том что нужно было правильно добавить заголовок
res.writeHead(200, {
'Content-Type': 'text/plain;',
"Access-Control-Allow-Origin":"*"
});
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
|
|