Отправка и получение простого текста вместо объекта с узлом http - PullRequest
1 голос
/ 01 февраля 2020

Я невероятно новичок в попытках сделать что-либо, касающееся веб-серверов и тому подобного, и я застрял, пытаясь отправить данные с javascript, который запускается на веб-сайте, на сервер, который работает локально. Я смог заставить их общаться, но все данные, которые я получаю на сервере, всегда просто «[объектный объект]» вместо строки, которую я посылаю из браузера.

Вот как сервер в данный момент выглядит очень голым:

http.createServer(function(request, response){
    response.writeHead(200, {"Content-Type": "text/plain"});   
    console.log("request recieved: " + response + request);  
  }).listen(8001);

И это то, что я посылаю из браузера:

var url = "http://localhost:8001";

$.ajax({
    url: url,
    type: "POST",
    data: "Hello friend",
    contentType: "text/plain",
}); 

Я также пробовал что-то подобное, что приводит к той же проблеме :

var http = new XMLHttpRequest();
var sendData = "HELLO";
http.open("POST", "http://localhost:8001", true);
http.setRequestHeader("Content-type", "text/plain");
http.send(sendData);

Я также пытался использовать JSON .stringify на стороне сервера, чтобы попытаться получить строку, но это возвращает ошибку, утверждающую, что она не может использоваться на круговом объекте '.

Извините, если этот вопрос действительно глупый, как я уже сказал, я начинающий, и я впервые пытаюсь сделать что-то подобное удаленно. Я пытался исследовать, что делать по-другому, но после того, как попробовал бесчисленные варианты, я почувствовал, что мне нужно спросить здесь.

Заранее спасибо! И если понадобится дополнительная информация, я с радостью постараюсь раскрыть этот вопрос!

Ответы [ 2 ]

1 голос
/ 01 февраля 2020

Вы можете получить доступ к телу с помощью request.body. Вы не можете JSON.stringify весь запрос, потому что, как вы видели, он содержит круговые отложения, но вы можете сделать это с request.body.

1 голос
/ 01 февраля 2020

Когда вы используете оператор concatenation (+), javascript преобразует object в string. По умолчанию String представление объекта [object object]. Вот почему он печатает [object object].

http.createServer(function(request, response){
    response.writeHead(200, {"Content-Type": "text/plain"});   
    console.log("request recieved: " , response , request);  
  }).listen(8001);

А если вы хотите получить тело, то у вас есть событие прослушивания data и использование данных.

http
  .createServer(function(request, response) {
    let body = "";
    request.on("data", chunk => {
      body += chunk.toString(); // convert Buffer to string
    });
    request.on("end", () => {
      console.log(body);
      response.end('ok');
    });
  })
  .listen(8001);


Я порекомендую использовать пакет express, чтобы избежать всех стандартных кодов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...