2011-12-01 1 views
1

NodeJSでファイルをアップロードしようとしていますが、最も一般的なマルチパートライブラリを試しましたが、動作させることはできません。恐ろしいExpress 500 TypeError:未定義のメソッド 'complete'を呼び出せません

私はファイルを送信すると、完全なというメソッドが存在しないだけで500のエラーが発生しませんでした。私は似たようなモジュールだけを試してみました。 varがクラッシュする可能性はありますか?私はいくつかのconsole.log、utilを作りました。私は変数形式の何かを取得しませんでした。

これはコードです。これを解決しようとする素晴らしいアイデアがあり、より多くのコードが必要な場合は、お気軽にお問い合わせください!

var express  = require('express'); 
var form   = require('formidable'); 

var app = module.exports = express.createServer(
    express.favicon() 
    , express.bodyParser() 
    , express.cookieParser() 
    , express.session({secret: 'topsecret'}) 
    , everyauth.middleware() 
    , express.router(routes) 
); 


app.configure(function(){ 

    app.use(express.bodyParser()); 
    app.use(express.cookieParser()); 
    app.use(express.session({secret: "aiudhasiudj12" })); 
    app.use(everyauth.middleware()); 
    app.use(app.router); 
    app.set('view engine', 'jade'); 
    app.use('views', __dirname + '/views'); 
    app.use(express.static(__dirname + '/public')); 
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
    app.use(form({ keepExtensions: true })); 

}); 

app.configure('development', function(){ 
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
}); 

everyauth.everymodule 
    .findUserById(function (userId, callback) { 

    Login.findLocalByEmail([userId], function (error, results) { 
    callback(null, { userId: userId, data: results}); 
    }); 
}); 

everyauth.facebook... 

[...] 

app.get('/la', function(req, res){ 
    res.send('<form action="la" method="post" enctype="multipart/form-data">' 
    + '<p>Image: <input type="file" name="image" /></p>' 
    + '<p><input type="submit" value="Upload" /></p>' 
    + '</form>'); 

    //console.log(util.inspect(form, true, null)); 
}); 

app.post('/la', function(req, res) { 

    console.log(util.inspect(req.form, true, null)); 

    req.form.complete(function(err, fields, files) { 

    console.log(fields); 
    console.log(files); 

    if(err) { 
     next(err); 
    } else { 

    } 
    }); 
}); 

ありがとう!

答えて

2

Expressにはconnectが含まれています。これには恐ろしいものも含まれます。

あなたがしなければならないのは、bodyParserを使用して、フォームのすべてのフィールドを含む "req.body"をチェックすることだけです。

1

2つの選択肢があります。

  1. あなたがreq.formを使用したい場合は、https://github.com/dandean/express-formミドルウェアを使用する必要があります。

  2. 実際にはformidableを使用すると仮定すると、リクエストハンドラ内に記述する正しいコードは次のようになります。

    var form = new formidable.IncomingForm(); 
    form.parse(req, function(err, fields, files) { 
        res.writeHead(200, {'content-type': 'text/plain'}); 
        res.write('received upload:\n\n'); 
        res.end(sys.inspect({fields: fields, files: files})); 
    }); 
    
+0

私は恐ろしいですがブラウザは決して終わらず、決してthroughs form.parse関数を使わないようにしています。私は、フォーム定義の後にconsole.logをコーディングし、私の応答だった: '{エラー:ヌル、 が終了:偽、 maxFieldsSize:2097152、 keepExtensions:偽、 uploadDir: '/ tmp' の、 エンコーディング:「UTF-8 」 ヘッダー:ヌル、 タイプ:ヌル、 には、bytesreceived:ヌル、 はbytesExpected:ヌル、 _parser:ヌル、 _flushing:0、 _fieldsSize:0} '任意のアイデア? – enedebe

0

あなたのhtml形式のファイルの入力名は「画像」である場合は、「req.files.image」をチェックする必要があります。以下を試してみてください:

console.log('File name: ' + req.files.image.name);