2013-07-30 117 views
0

我只是想寫一個簡單的node.js應用程序,它將能夠通過post來寫入文件並使用express.static()訪問該文件。Http Post with node.js and express

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('/receieve', function(request, respond) { 
    filePath = __dirname + '/public/data.txt'; 
    fs.appendFile(filePath, request.body) 
}); 

app.listen(1110); 

我使用postman瀏覽器擴展程序來測試我的崗位工作正常,但我收到「無法POST /接收」當我嘗試發送原始JSON。任何想法可能是什麼問題?謝謝!

+3

您在'app.post('/ receieve'' –

+0

感謝@ go-oleg!中有一個錯字!我不知道我看了多久沒有注意到這個! – user4815162342

+0

您應該發佈一個答案,以便@ user4815162342可以接受並且問題可以消失 –

回答

4

由於去,奧列格提到,有服務器端路線和客戶端的請求之間的不匹配:

'/receive' !== '/receieve' // extra `e` in the route 

您可能還需要附加request.body時指定的格式。 Object#toString,其中appendFile()將使用,僅產生"[object Object]"

fs.appendFile(filePath, JSON.stringify(request.body)); 

而且,你應該在某些時候.end()response

fs.appendFile(filePath, JSON.stringify(request.body)); 
response.end(); 
fs.appendFile(filePath, JSON.stringify(request.body), function() { 
    response.end(); 
}); 

您也可以使用.send()如果你想包括在response的消息。它會打電話給.end()

+0

非常感謝@Jonathan的負責人,但現在正在追加{},但請再次感謝您的幫助! – user4815162342

+1

@ user4815162342 Express在分析前檢查Content-Type:[if ('application/json'!= utils.mime(req))return next();'](http://www.senchalabs.org/connect/json.html)。所以,確保它被設置爲['application /json'](http://stackoverflow.com/a/477819)郵遞員(似乎你選擇「Raw」,然後選擇「JSON」) –

+0

了不起的信息@Jonathan。 response.end()。我不知道send()調用ed .end()。謝謝! – user4815162342