【问题标题】:Nodejs json string shows as [object Object]Nodejs json字符串显示为[object Object]
【发布时间】:2013-12-24 18:04:00
【问题描述】:

前端

// js / jquery
var content = {
    info : 'this is info',
    extra : 'more info'
}
$.ajax({
    type: 'POST',
    url: '/tosave',
    data: content
}); 

节点

// app.js
app.post('/tosave', function(req, res){
    fs.writeFile('/saved.txt', req.body, function(err, data){})
});

这将作为[object Object] 保存到文件中。当我在通过 ajax 请求发送内容之前对内容使用 JSON.stringify() 时,我得到了相同的结果。但是,如果我在 node.js 中对其进行字符串化,它会成功保存为{"info":"this is the info","extra":"this is extra"}

我的问题是为什么会发生这种情况?另外,我将如何在ajax请求之前将其转换为json字符串?

【问题讨论】:

  • 在您的示例中,writeFile 的正确语法肯定是:fs.writeFile('/saved.txt', data, function(err){})
  • 是的,我刚刚编辑了我的示例,这不是问题
  • 嗯,一个对象的默认字符串表示是[object Object]
  • 这是个问题吗?如果您希望它作为节点端的字符串,您可以在那里对其进行字符串化。似乎 node 只是识别出它是一个 json 字符串并在途中为您解码它。
  • 我明白了,但是如何在没有实际数据而不是 [object Object] 的情况下将内容写入文件,这样我才能真正看到数据?

标签: javascript ajax json node.js


【解决方案1】:

看来 jquery 和 node 在这里都非常有用。

Jquery 识别出您正在发送一个对象,并在发送它之前自动转换为可以传输的格式。

Node 识别您发送的内容,并在收到时对其进行解码,将其转回对象。

基本上这意味着您不必担心交通问题。

有什么不喜欢的?

【讨论】:

  • 这在技术上是不正确的; jQuery 将对象作为 POST 数据而不是 JSON 发送。 Node 然后将它接收到的 POST 数据转换成一个对象。
【解决方案2】:

如果您真的想发送文本(例如,它恰好看起来像正确的 JSON,但不是),并且不希望 Node 将其视为 JSON 并将其转换为您的对象,您可以尝试指定:

$.ajax({
    type: 'POST',
    url: '/tosave',
    data: content,
    processData: false
}); 

这将导致使用application/x-www-form-urlencoded 发送数据,这可能会阻止 Node 将数据转换为 JSON 对象。

但是,我建议在将 req.body 写入文件之前简单地将其字符串化。 writeFile 不会为您执行此操作,因为我想您可以发送缓冲区而不是字符串。

【讨论】:

    猜你喜欢
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多