req.body.username не выводит правильное значение

#javascript #html #node.js #express #xmlhttprequest

#javascript #HTML #node.js #выразить #xmlhttprequest

Вопрос:

отправленные данные — http.send(JSON.stringify(данные));

вывод данных -> {имя пользователя: «dsa», пароль: «dsa»}

вывод JSON.stringify(данные) -> «{«username»:»dsa»,»password»:»dsa»}»

вывод req.body на стороне сервера ->
{ ‘{«username»:»dsa»,»password»:»dsa»}’: » }

вывод req.body.username -> не определено (ожидается «dsa»)

Анализатор тела установлен и используется с приложением.

Javascript:

 server.register = function(){
    console.log('ran func');
    usernameinput = document.getElementById("registerform").elements["username"].value
    passwordinput = document.getElementById("registerform").elements["password"].value
    var data = {
        "username":usernameinput,
        "password":passwordinput
    }
    http.open("post", server.regurl,true);
    http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http.send(JSON.stringify(data));

}
  

код настройки сервера содержит следующее:

 const bodyParser = require('body-parser')
var app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }))
app.use(express.static(__dirname   '/')),
  

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

1. попробуйте req.username, я не вижу никакого свойства «body» в вашем JSON.

2. @James также не определено

3. где вы объявили или импортировали http . модуль htpp доступен только на стороне сервера.

4. У меня есть const http = new XMLHttpRequest(); в моем файле javascript и http = require (‘http’). Сервер (приложение) в моем файле сервера

Ответ №1:

Вы упорядочили свой объект JSON, чтобы вы действительно могли адресовать его ключи на стороне сервера — это обычная строка.

вы могли бы отправить его как есть (объект JSON)

sent data - http.send(data);

или

sent data - http.send({payload: JSON.stringify(data)});

а затем на стороне сервера

 var x = JSON.parse(req.body.payload)
x.username;
  

ОБНОВЛЕНИЕ ДЛЯ ОТВЕТА:

после небольшого чтения. AJAX — Отправка запроса на сервер

и в нем говорится, что вы должны фактически отправить строку, поэтому это может быть просто неправильный формат строки.

 xhttp.open("POST", "demo_post2.asp", true);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.send("fname=Henryamp;lname=Ford");
  

но JSON.stringify не даст вам этот синтаксис URLish. возможно, вам следует манипулировать строкой перед ее отправкой.

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

1. var x = JSON.parse(req.body); выдает мне ошибку типа: не удается преобразовать объект в примитивное значение в JSON.parse (<анонимный>)

2. как вы отправляете параметры? откуда. пожалуйста, добавьте некоторое описание к вашему вопросу. Если вы используете app.use(express.urlencoded({extended: true})); ` Тогда все готово . вам нужно отправить параметры в HTTP-запросе. но я не знаю, как вы реализуете отправку.. пожалуйста, уточните для получения дополнительной помощи.

3. причина, по которой это происходит с вами, заключается в том, что req.body уже является объектом, поэтому вы не можете его разобрать на что угодно. я думаю, ваша проблема в том, как вы пытаетесь отправить запрос, если вы опубликуете его, мы сможем увидеть весь процесс и исправить это

4. а если вы просто отправите данные без stringify на сервер? вы должны быть в состоянии просто достичь req.body.username ..

5. Рад, что смог помочь. Продолжайте кодировать! ✌

Ответ №2:

если вы используете JSON.stringify, вам нужно что-то вроде этого ‘application / json’

 server.register = function(){
    console.log('ran func');
    usernameinput = document.getElementById("registerform").elements["username"].value
    passwordinput = document.getElementById("registerform").elements["password"].value
    var data = {
        "username":usernameinput,
        "password":passwordinput
    }
    http.open("post", server.regurl,true);
    http.setRequestHeader('Content-type', 'application/json')
    http.send(JSON.stringify(data));

}