Не могу отправить строку Json по xmlhttprequest с клиента на сервер Nodejs, используя POST

#javascript #node.js #json #post #xmlhttprequest

Вопрос:

Я довольно новичок в JS и Nodejs, и я застрял на 3 дня, пытаясь достичь этого ==>

Отправьте тело jsonstringified на сервер через:

 <!DOCTYPE html>
<html>
<head>
  <title>
    JavaScript | Sending JSON data to server.
  </title>
</head>
<body style="text-align:center;" id="body">
  <h1 style="color:green;">
    Post Product
  </h1>
  <p>
  <form action='/' method="POST">
    <input type="text" id="name" placeholder="Product Name">
    <input type="text" id="price" placeholder="Price">
    <button id="btn">Send JSON</button>
    <p class="result" style="color:rgb(6, 177, 6)"></p>
  </form>
  <script>
    let button = document.querySelector("#btn");
    button.addEventListener("click", sendJSON, true);

    function sendJSON() {
      let name = document.querySelector("#name");
      let price = document.querySelector("#price");
      let url = "localhost:4000";
      let xhr = new XMLHttpRequest();

      xhr.onreadystatechange = function () {
        if (xhr.readyState === 4 amp;amp; xhr.status === 201) {
          result.innerHTML = this.responseText;
        }
      };
      const json = [{name: name, price: price}];
      xhr.open('POST', url, true);
      xhr.setRequestHeader('content-type', 'application/json');
      alert(xhr)
      xhr.send(JSON.stringify(json));
    }
  </script>
  </p>
</body>
</html>
 

И получение данных на стороне сервера через:

 const express = require('express')
const routes = require('./routes/routes');
const cors = require('cors')
const server = express()

server.use(express.json())
server.use(cors())
server.set('view engine', 'ejs')
server.set("views",__dirname   "/views")

server.listen(4000, function() {
    console.log('http server on 4000 port')
});

server.post('/', function(req,res) {
    console.log(req);
    console.log(req.params)
    console.log(req.body)
});

server.get('/', function(req, res) {
    var path = require('path');
    res.sendFile(path.resolve('index.html'));
  });
 

Но все, что я получаю от консоли(req.body) и консоли (req.params), это {} {}, я все еще не знаю, отправляется ли json и не получен или даже не отправляется. Я уже перепробовал кучу советов о cors и jsonparsing на стороне сервера, но ничего из этого, похоже, не работает. Я был бы рад любым предложениям о том, как это сделать, и еще лучше знаю проблему, стоящую за тем, что я делаю неправильно. Большое спасибо.

Комментарии:

1. Проверьте вкладку сеть в инструментах разработчика Chrome. Отправляют ли тело?

2. @ArielAlvarado в нем указано состояние: (ожидание) и 1 ошибка «Не удалось загрузить ресурс, сервер ответил 404 не найден».