2

複数の説明テキスト フィールド、ファイル選択フィールド、およびクロス ドメイン リクエスト (CORS バリアント) の送信ボタンを含むフォームがあります。

  <form class="upload" id="upload_form" enctype="multipart/form-data" method="post" action="http://localhost:3001/upload/1234567890">

      <div class="row-fluid">

        <div class="span5 row-fluid" id="description" style="margin-left:0px;">
          <div>
              <label>Title</label>
              <input class="span12" type="text" placeholder="Title" id="description_title" name="description_title"/>
              <label>Author</label>
              <input class="span12" type="text" placeholder="Author" id="description_author" name="description_author"/>
              <label>Tags</label>
              <input class="span12" type="text" placeholder="Tags" id="description_tags" name="description_tags"/>
              <label>Description</label>
              <textarea class="span12" id="description_textarea" name="description_textarea" rows="5" style="resize:none"></textarea>

              <div id="buttons" class="row-fluid" style="margin-top: 5px">
                  <div class="span12">
                    <span class="span5 btn btn-primary btn-file" id="chose_files_btn" onclick="filechose_button.click()">chose files
                      <input id="filechose_button" type="file" name="fileData" data-url="http://localhost:3001/upload/1234567890"/></span>
                    <button id="upload_button" type="submit" name="upload" class="span5 offset2 btn btn-success" disabled="true" onclick="$('#upload_form').trigger('upload_fired');">upload</button>
                  </div> <!-- span12 -->
              </div> <!-- buttons -->
          </div> <!-- well -->
        </div> <!-- video_description -->
      </div> <!-- row-fluid -->

   </form>

Node.js (Express.js) サーバーには次のルートがあります。

app.post('/upload/:id', function(req, res){
    console.log(req.fields);
        ...
});

問題は、入力フィールドからデータが見つからないことです: req.fieldsgets undefined

reqサーバー上のからデータ (テキストの説明とファイル) を見つけるにはどうすればよいですか?


アップデート:

すごい!req.body実際にはすべてのフィールドにアクセスできますが、次のようになります

console.log(req.body)

プリント:

{ description_title: 'aaa',
  description_author: 'bbb',
  description_tags: 'ccc',
  description_textarea: 'ddd',
  upload: '' }

しかし、fileDataフィールドはどこですか?つまり、説明(前述のフィールド)とともにアップロードしたファイルはどこにあるのでしょうか。

更新 2: 完了!

ファイルは body 属性ではなく、req.files

アダムアンディファンに感謝!

4

2 に答える 2

2

これらの2行が表示された場合、アダムが言ったように

app.use(express.bodyParser());
app.use(express.methodOverride());

Express の app.js ファイルでは、以下のようにフィールドを読み取ることができます。

app.post('/upload/:id', function(req, res){
    console.log(req.body.description_title);
    console.log(req.body.description_author);
    console.log(req.body.description_tags);
    console.log(req.body.description_textarea);
    console.log(req.files);
    res.send("Done!");
});

このリンクhttp://howtonode.org/really-simple-file-uploadsで、高速でファイルを処理する方法の詳細を読むことができます

于 2013-04-27T08:40:57.670 に答える
1

ルートの前に構成にあるreq.body限り、必要です。express.methodOverride()

ルートconsole.log(req.body);で、そこに到達するオブジェクトを確認してください。ルート パラメータの場合はreq.params.

console.log(object);探しているオブジェクトとそれらが含まれているデータ構造を見つけようとするとき、あなたの親友になることができます。

于 2013-04-27T01:19:56.177 に答える