2011-07-16 51 views
3

我正在使用NodeJS,并且正在努力让用户上传文件。现在,尽管我有很多问题,甚至试图获得一个简单的POST请求。ExpressJS中的POST请求问题

在我index.ejs

对文件我有一些代码,创建了一个表格,然后发送POST请求:

<div id="uploaddiv">Upload things here<br> 
<form action="/upload" enctype="multipart/form-data" method="post"> 
<input type="text" name="title"><br> 
<input type="file" name="upload" multiple="multiple"><br> 
<input type="submit" value="Upload"> 
</form> 
</div> 

然后在server.js,我有一个处理上传代码。

var server = express.createServer(); 
//bunch of stuff left out 
server.get('/upload', function(req, res) { 
console.log("uploading!"); 
if (req.method.toLowerCase() == 'post') { 
    res.write('lol'); 
} 
}); 

我的问题是,直接导航到localhost /上传将正常CONSOLE.LOG,但点击按钮给我的错误“无法发布/上传”。

谢谢!

回答

13

server.get表示处理HTTP GET。你想要server.post。仅供参考当无活动路由匹配请求且未配置404错误处理程序时,“Can not XXX/uri”错误是表达响应的错误。

+3

哦,我现在觉得非常愚蠢。我认为这会是一件非常愚蠢的事情,但不是这么重要。谢谢! –

4

通过使用server.get(),您指示该路由仅响应GET请求,但该表单显然是POST。您可以使用server.post()

如果您希望对GET和POST(以及其他每个HTTP动词)都做出响应,您也可以使用server.any()

3

您应该使用FelixGeisendörfer的node-formidable来上传文件。

var express  = require('express'), 
    app  = express.createServer(), 
    util  = require('util'), 
    formidable = require('formidable'); 

app.get('/upload', function (req, res){ 
    res.writeHead(200, {'content-type': 'text/html'}); 
    res.end(
    '<form action="/upload" enctype="multipart/form-data" method="post">'+ 
    '<input type="text" name="title"><br>'+ 
    '<input type="file" name="upload" multiple="multiple"><br>'+ 
    '<input type="submit" value="Upload">'+ 
    '</form>'); 
}); 

app.post('/upload', function (req, res) { 
    var form = new formidable.IncomingForm(); 
    form.uploadDir = '.'; 
    form.keepExtensions = true; 

    form.parse(req, function(err, fields, files) { 
     res.writeHead(200, {'content-type': 'text/plain'}); 
     res.write('received upload:\n\n'); 
     res.end(util.inspect({fields: fields, files: files})); 
    }); 
    return; 
}); 

app.listen(3000, '127.0.0.1'); 

这只是一个简单的,因为这样做是为了节省文件上传感谢节点强大。