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);
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));