Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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);
like image 709
user4815162342 Avatar asked Jul 31 '13 21:07

user4815162342


3 Answers

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);
like image 106
user4815162342 Avatar answered Nov 10 '22 11:11

user4815162342


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.

like image 25
Peter Lyons Avatar answered Nov 10 '22 11:11

Peter Lyons


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));
like image 40
spacedev Avatar answered Nov 10 '22 12:11

spacedev