2011-07-16 50 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'); 

這只是一個簡單的,因爲這樣做是爲了節省文件上傳感謝節點強大。