2011-07-16 23 views
3

私はNodeJSで作業しています。ユーザーがファイルをアップロードできるように取り組んでいます。今は単純なPOSTリクエストを取得しようとしても多くの問題を抱えています。私index.ejsでオーバーExpressJSのPOSTリクエストの問題

は、私は、フォームを作成し、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'); 
} 
}); 

私の問題は、ローカルホスト/アップロードに直接ナビゲートすることは、適切にconsole.logということですが、ボタンをクリックすると、私はエラー「POSTできません/アップロード」を与えます。

ありがとうございます!

答えて

13

server.getは、HTTP GETを処理することを意味します。あなたはserver.postが欲しいです。 「Can not XXX/uri」エラーは、アクティブなルートがリクエストと一致しないときに応答し、404エラーハンドラが設定されていないというエラーです。

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

node-formidableのおかげで、ファイルのアップロードが簡単です。