Using POST data to write to local file with node.js and express

40,610

Solution 1

var express = require('express'),
    fs = require('fs'),
    url = require('url');
var app = express();

app.use('/public', express.static(__dirname + '/public'));  
app.use(express.static(__dirname + '/public')); 

app.post('/receive', function(request, respond) {
    var body = '';
    filePath = __dirname + '/public/data.txt';
    request.on('data', function(data) {
        body += data;
    });

    request.on('end', function (){
        fs.appendFile(filePath, body, function() {
            respond.end();
        });
    });
});

app.listen(8080);

Solution 2

If you want to do POST requests with regular urlencoded bodies, you don't want to use bodyParser (since you don't actually want to parse the body, you just want to stream it to the filesystem). Consider just streaming the chunks of data with req.pipe(writeableStreamToYourFile).

If you want to do file uploads, you can use bodyParser for that, but it handles multiple files and writes them to disk for you and you would need to iterate through req.files and copy them from a temporary directory to your target file.

Solution 3

If you want to store Json data then file should be of **.Json type. Otherwise try casting it into string and write into **.txt file. Like

var fs = require('fs');
var writer = fs.createWriteStream('output.txt');
response = {
name: '',
id: ''
}
writer.write(JSON.stringify(response));
Share:
40,610
user4815162342
Author by

user4815162342

Updated on November 16, 2020

Comments

  • user4815162342
    user4815162342 over 3 years

    I'm trying to just handle simple POST requests and append the data to a local file. However, when I try to POST raw text with postman, such as 'hi world', what's actually appended is [object Object]. I'm not sure what could be causing this if nothing should be interpreted as an object on either end. Thank you!

    var express = require('express'),
        fs = require('fs')
        url = require('url');
    var app = express();
    
    app.configure(function(){
      app.use('/public', express.static(__dirname + '/public'));  
      app.use(express.static(__dirname + '/public')); 
      app.use(express.bodyParser());
    });
    
    app.post('/receive', function(request, respond) {
        filePath = __dirname + '/public/data.txt';
        fs.appendFile(filePath, request.body, function () {
            respond.end();
        });
    });
    
    app.listen(8080);