1

Express no.3 の最新バージョンを使用しています。ドキュメントを読んで、書かれているとおりに実行しましたが、想定どおりに動作しません。送信後にアップロードディレクトリにファイルを取得しますが、すべてが停止し、app.post からのコールバック関数が起動しません。コード:

HTMLジェイド

form(action="/upload", method="post", enctype="multipart/form-data")
  input(type="file", name="image")
  input(type='submit', value='submit')

App.js

var express = require('express')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path')
  , mongo = require('mongodb')
  , Server = mongo.Server
  , Db = mongo.Db
  , routes = require('./routes')

var  app = express();

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser({uploadDir:'./upload'}));
  app.use(express.methodOverride());
  app.use(express.cookieParser('your secret here'));
  app.use(express.session());
  app.use(app.router);
  app.use(require('stylus').middleware(__dirname + '/public'));
  app.use(express.static(path.join(__dirname, 'public')));
});

app.post('/upload', function(req, res) {
  console.log(req.files.image) // this doesn't fire at all - no matter what i write here 
  res.send(200) //doesn't run also
});
4

3 に答える 3

2

データを読み取った後、応答を返す必要があります。応答を返さないと、エクスプレスは応答がいつ終了するかを認識できず、ノードはクライアントへの接続を閉じません。

これを試して:

app.post('/upload', function(req, res) {
  console.log(req.files.image);

  req.on('data', function(raw) {
    console.log('received data');
  });

  req.on('end', function() {
    console.log('end');
    res.send(200);
  });
}
于 2013-02-26T10:39:05.167 に答える
2

ユーザーに簡単な応答を送信してみてください。

app.post('/upload', function(req, res) {
  console.log(req.files.image);
  res.write('File Uploaded !!');
  res.end();
}

アップデート

フォーマットを次のように変更してみてください。

app.post('/upload', function(err,req,res,next){
//Check for errors then handle it
}

ファイルがアップロードディレクトリにアップロードされているため、エラーが発生していることがわからない限り、多くのことはわかりませんbodyParser。ルートが別の関数によって処理されているか、まったく処理されていない可能性があります。app.routerコールバックを呼び出すコードです。

これを行うapp.get('/upload', function(req, res) { ... });と、コールバック関数を実際に呼び出してリクエストを処理するのはルーターです。app.get('/upload',...);html-jade ファイルを正常に実行できるかどうかを確認できますか。そうでない場合は、ルートに問題があります。

于 2013-02-26T11:49:31.517 に答える
1

最後に、解決策を見つけました。これは、ノード0.9.6-preを使用したためです。0.8.21に変更すると、すべて正常に動作します。

助けてくれてありがとう。

于 2013-02-28T17:10:59.387 に答える