javascript - Node js http服务器接受POST并接受JSON

标签 javascript json node.js

我正在尝试使用 http 包创建一个 Node js 服务器。我只想接收我已经实现的 POST 请求。我面临的问题是我无法正确解析 JSON(我希望附加一个 JSON)。

我尝试使用 JSON.parse,但它无法解析整个 json 内容。它将一些值保留为 [Object],这是错误的。我看到很少有 JSONStream 包,但我不确定在这种情况下如何实现。

server.on('request', function(req, res){
    if(req.method == 'POST')
    {
        var jsonString;

        req.on('data', function (data) {
            jsonString = JSON.parse(data);
        });

        req.on('end', function () {
            serverNext(req, res, jsonString);
        });
    }
    else
    {
        res.writeHead(405, {'Content-type':'application/json'});
        res.write(JSON.stringify({error: "Method not allowed"}, 0, 4));
    }       
    res.end();
});

请求示例:

这里 d = JSON 文件内容。 (我用 Python 做了这个来发出这个示例请求)

r = requests.post('http://localhost:9001', headers = {'content-type': 'application/json'}, data = json.dumps(d))

注意:我能够正确解析 JSON,但在某些情况下它会显示如下内容:

{ 'Heading': 
   { 'Content': 
      { sometext: 'value',
        List: [Object],         // Wrong
        test: [Array] } } }     // Wrong

更新:

在 serverNext() 内部,我得到的值很少,例如:

var testReq = Object.keys(jsonData)[0];
var testId = Object.keys(jsonData[testRequest])[0];
var test = jsonData[testRequest][testId]

此外,如果我继续提取值,那么在某个时候它会遇到 [Objects] 值并崩溃。

最佳答案

我可以用 data 重现这个“问题”作为{ "Foo": {"Bar": {"Some data": [43, 32, 44]} } } -- 它返回以下结果:{ Foo: { Bar: { 'Some data': [Object] } } } .

正如 OP 在问题中提到的那样,JSON 被正确解析,原因是 [Object] result中显示的是:返回JavaScript Object显示时,会先通过toString()转成String自动,这将使所有对象(包括数组)为[Object]在文本中。

要显示真实内容,JSON.stringify()需要被调用。在您的情况下,代码将是:

req.on('end', function () {
    serverNext(req, res, JSON.stringify(jsonString));
});

请注意最好重命名变量jsonString作为jsonObject .

关于javascript - Node js http服务器接受POST并接受JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45893104/

相关文章:

node.js - 有没有办法使用 Morgan-body 在 express.js 中创建自定义日志格式?

node.js - socket.io 获取当前套接字所在的房间

javascript - 对 JSON 数据进行排序并获取前 n 条记录

ios - 如何在 iOS 应用程序中获取 Node.js 服务器的响应?

javascript - 如果 Angular 模型中没有数据则显示消息

java - 使用gson解析Json

json - 无法使用类型为“(Codable.Type?

linux - 在 Linux 中的临时网络上托管 Web 应用程序

php - 允许的最大 cookie 数

javascript - 使用位置在图像上添加文本