【问题标题】:Write http request on a file with nodejs使用 nodejs 在文件上编写 http 请求
【发布时间】:2017-02-17 12:00:52
【问题描述】:

如何将 http 请求保存在文件中? 我使用 nodejs 作为服务器。我通过 ajax 发送数据,如下所示

user_info = 
    {
        system_info: [
            {'browesr': browser},
            {'brower-version': version},
            {'cookies': cookieEnabled},
            {'os': os},
            {'os-version': osVersion}
        ]
    }
}

$.ajax({
    url: 'http://127.0.0.1:4560',
    data: {"info" : JSON.stringify(user_info)},
    type: 'POST',
    jsonCallback: 'callback',
    success: function(data) {
        var ret = jQuery.parseJSON(data);
        $('#lblResponse').html(ret.msg);
        console.log('success');
    },
    error: function(xhr, status, error) {
        console.log('Error:' + error.message);
        $('#lblResponse').html('Error connecting to the server.');
    }
});

post 方法正常工作,并且在服务器端也接收到数据。 我的问题是如何保存数据! 我搜索并找到有关流媒体的信息。这是我的 nodejs 服务器代码。

var http = require('http');
var fs = require('fs');

http.createServer(function (req, res) {

    console.log('Request Received');

    res.writeHead(200, {
        'Context-Type': 'text/plain',
        'Access-Control-Allow-Origin': '*'
    });

    req.on('data', function (chunk) {
        var rstream = fs.createReadStream(JSON.parse(chund));
        var wstream = fs.createWriteStream('info.txt');
        rstream.pipe(wstream);
        str += chunk;
        console.log('GOT DATA');
    });

    res.end('{"msg": "OK"}');
}).listen(4560, '127.0.0.1');
console.log('Server running at http://127.0.0.1:4560/');

我使用 fs 模块和流媒体,但根本不起作用,“info.txt”在同一目录中的服务器代码附近。

谁能帮帮我?

【问题讨论】:

    标签: javascript ajax node.js fs


    【解决方案1】:

    您已经完成了大部分任务。这是一个基于您的代码的工作示例:

    var http = require('http');
    var fs = require('fs');
    
    http.createServer(function (req, res) {
    
        console.log('Request Received');
    
        var body = '';
    
        res.writeHead(200, {
            'Context-Type': 'text/plain',
            'Access-Control-Allow-Origin': '*'
        });
    
        req.on('data', function (chunk) {
            body += chunk;
        });
    
        req.on('end', function() {
            fs.writeFile('file.json', body, 'utf8');
            res.end('{"msg": "OK"}');
        })
    
    }).listen(4560, '127.0.0.1'); console.log('Server running at http://127.0.0.1:4560/');
    

    这会将您发送的内容保存到名为“file.json”的文件中。

    您还需要对您的 Ajax 请求进行一些小改动:

    url: 'http://127.0.0.1:4560',
    data: JSON.stringify({"info" : user_info}),
    contentType: "application/json",
    type: 'POST',
    jsonCallback: 'callback',
    

    如果你想修改你写入文件的内容,那么你可以这样:

    req.on('end', function() {
        var parsedJson = JSON.parse(body);
        fs.writeFile('file.json', JSON.stringify(parsedJson.info), 'utf8');
        res.end('{"msg": "OK"}');
    })
    

    如果您想追加文件,而不是覆盖它,那么您可以执行以下操作:

    req.on('end', function() {
        var parsedJson = JSON.parse(body);
        // Read and parse the JSON file
        var file = require('file.json');
        file[parsedJson.someKindOfID] = parsedJson;
        fs.writeFile('file.json', JSON.stringify(file), 'utf8');
        res.end('{"msg": "OK"}');
    })
    

    但这取决于你在文件中的数据结构。

    【讨论】:

    • 谢谢哥们!只有一个问题,当我打开file.json时,保存的数据是这样的:info=%7B%22system_info%22%3A%5B%7B%22browser....,为什么没有像普通json那样显示数据?
    • 在您的 Ajax 请求中,尝试 data: JSON.stringify({"info" : user_info}) 并设置 contentType: "application/json"
    • 正确! ,但还有一个问题,当你在新的操作系统或网络浏览器中打开页面时,服务器会删除以前的json并写入新的,我该如何追加数据?
    • 我已经用一个例子更新了答案。或者,您可以为每个请求创建一个新文件并更改文件名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    相关资源
    最近更新 更多