req.body.username没有输出正确的值

时间:2019-03-08 17:02:57

标签: javascript html node.js express xmlhttprequest

已发送数据- http.send(JSON.stringify(data));

输出数据-> {用户名:“ dsa”,密码:“ dsa”}

输出JSON.stringify(data)-> “ {”用户名“:” dsa“,”密码“:” dsa“}”

输出需求主体服务器端->
{'{“用户名”:“ dsa”,“密码”:“ dsa”}':''}

输出req.body.username-> 未定义(预期为“ dsa”)

Body解析器已安装并与应用程序一起使用。

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 + '/')),

2 个答案:

答案 0 :(得分: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 - Send a Request To a Server

它说您应该实际发送 字符串,因此它可能是错误的字符串格式。

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

,但是JSON.stringify不会为您提供这种“ URLish”语法。也许您应该在发送字符串之前对其进行操作。

答案 1 :(得分:1)

如果您使用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));

}