2013-07-31 85 views
4

我想只處理簡單的POST請求並將數據追加到本地文件。但是,當我嘗試使用postman(例如「hi world」)發佈原始文本時,實際添加的內容是[object Object]。我不確定如果沒有任何東西應該被解釋爲任何一端的對象,可能會造成這種情況。謝謝!使用POST數據寫入本地文件與node.js和快遞

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

由於您使用bodyParser req.body是(我總是假設)一個對象。我不知道郵差是如何工作的,但不應該發送任何你想發送的數據(例如req.body.param)? –

回答

14
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

+0

已更新以反映此問題 – user4815162342

+0

爲什麼不只是'request.pipe(fs.createWriteStream(filePath,{flags:'a'})) ' – masterxilo

4

如果你想要做定期urlencoded的機構POST請求,你不希望使用bodyParser(因爲你實際上並不需要解析的身體,你只是想它傳輸到文件系統) 。考慮只用req.pipe(writeableStreamToYourFile)來傳輸數據塊。

如果您想要進行文件上傳,您可以使用bodyParser,但它可以處理多個文件並將它們寫入磁盤,您需要遍歷req.files並將它們從臨時目錄複製到目標文件。

2

如果你想存儲Json數據,那麼文件應該是** .Json類型。否則請嘗試將其轉換爲字符串並寫入*​​ .txt文件。像

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