使用POST数据在node.js和express中写入本地文件

7

我正在尝试处理简单的POST请求,并将数据追加到本地文件中。然而,当我尝试使用postman发送原始文本(如“hi world”)时,实际追加的是[object Object]。如果在任一端都不应解释为对象,则不确定可能导致这种情况的原因。谢谢!

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

由于您正在使用bodyParser,req.body是一个对象(我假设始终如此)。我不知道postman的工作原理,但是您尝试发送的任何数据都应该被命名(例如req.body.param),请注意。 - Andreas Hultgren
3个回答

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

2
app.configure现已弃用,但是如果您注释掉第6行和第9行,此代码仍然可以工作。 - dirkk0
1
为什么不直接使用 request.pipe(fs.createWriteStream(filePath, {flags:'a'})) 呢? - masterxilo

5
如果您想使用常规的urlencoded body进行POST请求,您不需要使用bodyParser(因为您实际上不想解析这个body,而是想将其流式传输到文件系统中)。请考虑使用req.pipe(writeableStreamToYourFile)来流式传输数据块。
如果您想上传文件,可以使用bodyParser,但它处理多个文件并将它们写入磁盘,您需要遍历req.files并将它们从临时目录复制到目标文件。

这将一个10行的函数变成了1行。太多的冗余代码,时间太少了...也不需要busboy。 - user1944491

4

如果您想存储Json数据,则文件应为**.Json类型。否则,请尝试将其转换为字符串并写入**.txt文件中。例如:

var fs = require('fs');
var writer = fs.createWriteStream('output.txt');
response = {
name: '',
id: ''
}
writer.write(JSON.stringify(response));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接