前端
// 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字符串?
答案 0 :(得分:0)
似乎jquery和node在这里都非常有帮助。
Jquery识别出您正在发送一个对象并自动转换为可以在发送之前传输的格式。
节点识别您发送的内容,并在接收时将其解码,然后将其重新转换为对象。
基本上这意味着您不必担心运输。
有什么不喜欢的?
答案 1 :(得分:0)
如果你真的想发送文本(例如看起来像JSON正确,但不是),并且不希望Node将其视为JSON并将其转换为对象,则可以尝试指定:
$.ajax({
type: 'POST',
url: '/tosave',
data: content,
processData: false
});
这将导致数据与application/x-www-form-urlencoded
一起发送,这可能会阻止Node帮助将数据转换为JSON对象。
但是我建议在将req.body
写入文件之前简单地对其进行字符串化。我想,writeFile
不会为你做这件事,因为你可以发送一个缓冲区而不是一个字符串。