#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));
}