2015-11-17 4 views
0

Я использую Ajax для загрузки данных формы. Выходной файл multer (req.file, req.body) всегда равен undefined/{};Multer не может получить данные формы загрузки в Express 4

Мой код сервера:

import multer from 'multer'; 
import post from './router/api_post'; 

var upload = multer({dest: 'uploads/'}); 

app.use('/api/post', upload.single('thumb') , post); 

и файл api_post маршрутизатор:

import express from 'express'; 
var router = express.Router(); 

router 
    .post('/', (req, res, next) => { 
     console.log("POST POST"); 
     var post = {}; 
     console.log(req.body); 
     console.log(req.file); 
    }); 

export default router; 

выход req.body является {} и req.file is undefined`.

Я использую реагировать на стороне браузера и загрузки данных через AJAX:

savePost(ev) { 
    ev.preventDefault(); 
    var editor = this.refs.editorDom.getDOMNode(); 
    var ajaxReq = new AjaxRequest(); 
    var formData = new FormData(); 
    formData.append('post_id', this.state.post_id); 
    formData.append('title', this.state.title); 
    formData.append('author', this.state.author); 
    formData.append('digest', this.state.digest); 
    formData.append('content', editor.innerHTML); 
    formData.append('content_source_url', this.state.content_source_url); 
    formData.append('create_time', new Date()); 
    formData.append('thumb', this.state.thumb); 
    ajaxReq.send('post', '/api/post',()=>{ 
     if(ajaxReq.getReadyState() == 4 && ajaxReq.getStatus() == 200) { 
     var result = JSON.parse(ajaxReq.getResponseText()); 
     if(result.ok == 1) { 
      console.log("SAVE POST SUCCESS"); 
     } 
     } 
    }, '', formData); 
    } 

savePost() является обратным вызовом слушателя событиечрезвычайной кнопки. Я успешно загружал данные с грозным. Я просто заменил грозную мультер, но не смог ее получить.

Я не задал свойство content-type. Я нашел его в заголовке является , multipart/form-data; boundary=----WebKitFormBoundary76s9Cg74EW1B94D9

HTML form «s является

<form id="edit-panel" data-reactid=".ygieokt1c0.1.0.1.0.1"> 
    <div id="title" class="form-group" data-reactid=".ygieokt1c0.1.0.1.0.1.0"> 
    <input type="text" class="form-control" name="title" value="" data-reactid=".ygieokt1c0.1.0.1.0.1.0.1"> 
    </div> 
    <div id="author" class="form-group" data-reactid=".ygieokt1c0.1.0.1.0.1.1"> 
    <input type="text" class="form-control" name="author" value="" data-reactid=".ygieokt1c0.1.0.1.0.1.1.1"> 
    </div> 
    <div id="thumb" class="form-group" data-reactid=".ygieokt1c0.1.0.1.0.1.2"> 
    <button class="btn btn-default" data-reactid=".ygieokt1c0.1.0.1.0.1.2.1"> 
     <input type="file" name="thumb" accept="image/*" data-reactid=".ygieokt1c0.1.0.1.0.1.2.1.0"> 
     <span data-reactid=".ygieokt1c0.1.0.1.0.1.2.1.1">UPLOAD</span> 
    </button> 
    </div> 
    <div class="form-group" data-reactid=".ygieokt1c0.1.0.1.0.1.3"> 
    <textarea class="form-control" name="digest" rows="5" data-reactid=".ygieokt1c0.1.0.1.0.1.3.1"></textarea> 
    </div> 
    <div id="rich-text-editor" class="form-group" data-reactid=".ygieokt1c0.1.0.1.0.1.4"> 
    <div id="editor-div" class="form-control" contenteditable="true" data-reactid=".ygieokt1c0.1.0.1.0.1.4.1"></div> 
    </div> 
    <div id="content-source-url" class="form-group" data-reactid=".ygieokt1c0.1.0.1.0.1.5"> 
    <input type="text" class="form-control" name="content_source_url" value="" data-reactid=".ygieokt1c0.1.0.1.0.1.5.1"> 
    </div> 
    <button class="btn btn-default" data-reactid=".ygieokt1c0.1.0.1.0.1.6">保存并提交</button> 
</form> 

Я могу вывести thumb, это File{} объект.

Спасибо за помощь.

ответ

1

И наконец, я нашел проблему Content-Type.

Я использовал this.request.setRequestHeader("Content-Type", postDataType);, чтобы установить Content-Type и установить postDataType к '', то в заголовке фактический Content-Type является , multipart/form-data; boundary=----WebKitFormBoundary76s9Cg74EW1B94D9 как я уже упоминалось в первой.

Вы можете видеть, что есть запятая и пробел перед multipar/form-data. Я не знаю, откуда эта запятая. Но в любом случае, когда я удаляю запятую и пространство, все просто отлично работает!

Смежные вопросы