2013-07-30 53 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