Почему сервер ничего не отдает клиенту?

Изучаю ajax и хочу его протестировать. Для этого написал простой сервер на node.js, который читает файл и отдает клиенту информацию из него в виде строки.

Исходный код со стороны клиента:
"use strict";

(function() {

    var xhr = new XMLHttpRequest();

    xhr.open("GET", "http://127.0.0.1:1534/test.txt");
    xhr.setRequestHeader("Access-Control-Allow-Origin", "*");

    xhr.addEventListener("readystatechange", function(event) {
        if (xhr.readyState == 4) {
            console.log("connection is successful");
        }
        console.log(xhr.response);
    });

    xhr.send(null);

})();


Исходный код со стороны сервера:
"use strict";

var http = require("http");
var url = require("url");
var fs = require("fs");

var server = new http.Server(function(req, res) {

	switch (req.url) {

	case "/test.txt":
		res.setHeader("Cache-control", "no-cache");
  		res.end("OK");

		fs.readFile("test.txt", function(err, info) {
			if (err) {
				console.log(err);
				res.statusCode = 500;
				res.end("Server error");
			}
			console.log(info.toString());
			res.end(info.toString());
		});
		break;

	default: 
		res.statusCode = 404;
		res.end("File not found :(");
	}

});

server.listen(1534, '127.0.0.1');


Когда загружаю страницу, то в терминале, откуда запускался сервер, выводится содержимое файла. В консоли браузера ничего не происходит. Подскажите, пожалуйста, что я делаю не так?
  • Вопрос задан
  • 183 просмотра
Решения вопроса 1
BuriK666
@BuriK666
Компьютерный псих
у вас два раза вызывается res.end
res.end("OK");
и
res.end(info.toString());

"Access-Control-Allow-Origin:*" Должен отдавать сервер, а не клиент передавать.

client.js:
"use strict";

(function() {

    var xhr = new XMLHttpRequest();

    xhr.open("GET", "http://127.0.0.1:1534/test.txt");
    xhr.addEventListener("readystatechange", function(event) {
        if (xhr.readyState == 4) {
            console.log(xhr.response);
        }
    });
    xhr.send(null);
})();

server.js:
"use strict";

var http = require("http");
var url = require("url");
var fs = require("fs");

var server = new http.Server(function(req, res) {

      switch (req.url) {

                case "/test.txt":
                  res.setHeader("Cache-control", "no-cache");
                  res.setHeader("Access-Control-Allow-Origin", "*");

                  fs.readFile("test.txt", function(err, info) {
                            if (err) {
                                        console.log(err);
                                        res.statusCode = 500;
                                        res.end("Server error");
                                      }
                            console.log(info.toString());
                            res.end(info.toString());
                          });
                  break;

                default: 
                  res.statusCode = 404;
                  res.end("File not found :(");
                }

});

server.listen(1534, '127.0.0.1');
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы