【发布时间】:2016-04-04 12:49:51
【问题描述】:
我发布这个主题是关于标题所暗示的问题。我见过其他几个关于空请求正文的问题,但没有一个对我有帮助。希望如果我发布自己的代码,有人能够给我一个很好的提示。
基本上,我有一个客户端使用 javascript 向 Node.js 服务器发出 CORS HTTPRequest。通常这些 HTTPRequest 是 JSON 对象的帖子。
这里是客户端的示例代码。
username = document.getElementById("username").value;
password = document.getElementById("password").value;
var str = '{"name":"'+username+'","pass":"'+password+'"}';
var req = new XMLHttpRequest();
req.open("POST","http://xxxx:8099/register",true)
req.setRequestHeader("Content-type", "application/json");
req.onreadystatechange = function()
{
//irrelevant
}
req.send(str);
}
这是服务器的代码。
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({
extended: true
}));
// parse application/json
app.use(bodyParser.json());
app.listen(8099);
app.post("/register", function (req, res) {
console.log(req.body); // populated!
console.log(req.body.name);
res.send(200, req.body);
});
现在这些是我得到的结果:
如果我将请求 Content-type 设置为 application/json,那么在服务器上我会得到一个空的请求正文。
如果我将请求 Content-type 设置为 application/x-www-form-urlencoded,那么我会得到一个填充的主体,例如 { '{"name":"usernamtest","pass":"123"} ': '' }.
但是,如果我尝试打印 req.body.name,我会得到 undefined,这意味着 body-parser 没有正确地将 body 解析为 JSON。
我将如何解决这个问题?我只想在示例中得到这些属性的 JSON 对象。
对于阅读本文的人,我感谢您的宝贵时间。 补充, 里卡多·费雷拉·达席尔瓦
【问题讨论】:
-
您确定代码不有效吗?自己尝试过,我得到了预期的结果(名称打印到控制台)。您是否正确地从输入中获取数据?您可以尝试清理您的 XHR 代码:jsbin.com/revovemepu/edit?js
-
是的,我敢肯定,事实上,客户端可以完美地与我的教授已经制作的测试服务器一起工作,但它不能与我一起工作。如果我按原样运行代码,当我打印 req.body 时,我得到 {},这是一个空正文。
-
xxxx:8099/register 中的 xxxx 是什么?您实际上是在发出跨域请求吗?您为嵌入客户端 JS 的 HTML 页面提供服务的域与您制作 XHR 的域是否不同?
-
完整地址是twserver.alunos.dcc.fc.up.pt:8099/register,它是一个 Apache 服务器,因此我可以托管我的 node.js 服务器。这可能很重要,我发现当我尝试在请求中发送字符串化 JSON 时,我收到以下错误:XMLHttpRequest cannot load twserver.alunos.dcc.fc.up.pt:8099/register。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问 Origin 'null'。
-
而 index.html 文件是从哪里提供的?
标签: javascript json node.js cors body-parser