простой запрос ajax на сервер localhost nodejs - node.js


1

Я написал очень простой сервер:

/* Creating server */
var server = http.createServer(function (request, response) {
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.end("Hello Worldn");
});

/*Start listening*/
server.listen(8000);

Я запускаю его с помощью nodejs.

Теперь я хочу написать простой клиент, который использует вызов ajax для отправки запроса на сервер и ответа на печать (Hello World)

Здесь javascript of clinet:

$.ajax({
            type: "GET",
            url: "http://127.0.0.1:8000/" ,
            success: function (data) {
            console.log(data.toString);
            }
        });

Когда я открываю клиентский файл html, я получаю следующую ошибку в консоли:

XMLHttpRequest cannot load http://127.0.0.1:8000/. No Access-Control-Allow-Origin header is present on the requested resource. Origin null is therefore not allowed access. 

Я попытался добавить к ajax-вызову следующее:

 $.ajax({
            type: "GET",
            url: "http://127.0.0.1:8000/" ,
            dataType: jsonp,
            crossDomain: true,
            success: function (data) {
            console.log(data.toString);
            }
        });

Но тогда я получаю

Resource interpreted as Script but transferred with MIME type text/plain: "http://127.0.0.1:8000/?callback=jQuery211046317202714271843_1410340033163&_=1410340033164". 

Любой может объяснить, что я сделал неправильно, и, возможно, как это исправить?

Большое спасибо!

  •  8
  •  2
  • 8 фев 2020 2020-02-08 08:05:35

2 ответа

3

Чтобы преодолеть CORS, в файле node.js напишите ниже, основываясь на том, что вам нужно:

// Website you wish to allow to connect
res.setHeader(Access-Control-Allow-Origin, *);

// Request methods you wish to allow
res.setHeader(Access-Control-Allow-Methods, GET, POST, OPTIONS, PUT, PATCH, DELETE);

// Request headers you wish to allow
res.setHeader(Access-Control-Allow-Headers, X-Requested-With,content-type);

// Set to true if you need the website to include cookies in the requests sent
// to the API (e.g. in case you use sessions)
res.setHeader(Access-Control-Allow-Credentials, true);
2

Первая ошибка вызвана политикой CORS (Cross Origin Resource Sharing). Он управляет всеми браузерами тем, что вы не можете отправить запрос на удаленный сервер в AJAX, кроме текущего сервера, на который была загружена страница script/page, если только этот удаленный сервер не разрешает ее через заголовок Access-Control-Allow-Origin.

Я предлагаю обслуживать страницу с того же сервера Node.js. Тогда это сработает. Например, когда запрос поступает на страницу root /, затем подайте файл index.html, иначе сервер будет любым другим содержимым, которое вы хотите.

var http = require(http),
    fs = require(fs);

/* Creating server */
var server = http.createServer(function (request, response) {
    if (request.url == / || request.url == /index.html) {
        var fileStream = fs.createReadStream(./index.html);

        fileStream.pipe(response);
    } else {
        response.writeHead(200, {"Content-Type": "text/plain"});
        response.end("Hello Worldn");
    }
});

/*Start listening*/
server.listen(8000);
  • 8 фев 2020 2020-02-08 08:05:36