2016-06-04 4 views
8

에서 FormData를 처리 할 수 ​​있지만 내 양식 중 어느 것도 노드 팀에게 req.body 필드 없다 방법내가 내 노드 서버에 어떤 형태의 데이터를 전송하려고 특급 4

var express = require('express') 
var app = express() 
var path = require('path') 
var bodyParser = require('body-parser') 
app.use(bodyParser.urlencoded({ 
    extended: true 
})); 

app.get('/', function (req, res) { 
    res.sendFile('index.html') 
}) 
app.post('/sendmail', function (req, res) { 

    const formData = req.body.formData 

이 내가 브라우저에서 보내고있다 무엇

개발 도구에서
fetch('/send', { 
    method: 'POST', 
    body: new FormData(form) 
}) 

나는, 어쩌면 그

리퍼러 내 문제 리퍼러에 전달 된 데이터를 볼 경우에만 : http://localhost:3000/?name=&budget=%C2%A31000

+0

'몸 parser'은 다중 요청 시체를 처리하지 않습니다 :

예를 들어, 요청의 (일반) 필드를 검색 할 // www.npmjs.com/package/multer). – robertklep

+0

@robertklep 고맙습니다. 답장을 보내 주시기 바랍니다. JSON에 데이터를 추가하면 더 간단할까요? 나는 가져 오기 위해 FormData를 전달할 수 있고 멀티 파트로 전송할 수 있다는 사실에 놀랐다. – SuperUberDuper

답변

21

body-parser은 다중 본체를 처리하지 않으므로 FormData이 제출됩니다.

대신 multer과 같은 모듈을 사용하십시오. [`multer`] (HTTPS 같은 것을 시도

let multer = require('multer'); 
let upload = multer(); 

app.post('/send', upload.fields([]), (req, res) => { 
    let formData = req.body; 
    console.log('form data', formData); 
    res.sendStatus(200); 
}); 
+1

thx, 폼 데이터를 가져 와서 urlencoded를 통해 JSON 객체 (예 : 텍스트 입력 등)로 반환하는 유틸리티를 알고 있습니다. – SuperUberDuper

+1

@SuperUberDuper 아마도 [formData.entries() ] (https://developer.mozilla.org/en-US/docs/Web/API/FormData/entries)를 사용하여 양식 내용에서 JS 객체를 작성하십시오. – robertklep

+0

장면 뒤에서 일어나는'upload.fields ([])'는 무엇입니까? – Ced