busboy-connect를 사용하여 req 객체의 multipart 양식 데이터에 액세스하는 간단한 방법이 필요합니다. Express 4를 사용하고 있습니다. Express 4는 이전에 내장 된 기능을위한 모듈을 필요로합니다.Busboy를 사용하여 Express 4 req.body 객체에 액세스하는 방법
내 경로에서 req.body 개체를 사용할 수 있지만 busboy.on ('field') 함수는 비동기이며 코드를 계속 진행하기 전에 모든 양식 데이터를 처리하지 않습니다.
multer이라는 busboy 상단에 내장 된 미들웨어 모듈이 있습니다. 라우트에 들어가기 전에 req.body 객체를 얻지 만, busboy.on ('file') 이벤트를 정의 할 수있는 기능을 무시합니다. 노선.
// App.js
app.post(/users, function(req, res, next){
var busboy = new Busboy({ headers: req.headers });
// handle text field data (code taken from multer.js)
busboy.on('field', function(fieldname, val, valTruncated, keyTruncated) {
if (req.body.hasOwnProperty(fieldname)) {
if (Array.isArray(req.body[fieldname])) {
req.body[fieldname].push(val);
} else {
req.body[fieldname] = [req.body[fieldname], val];
}
} else {
req.body[fieldname] = val;
console.log(req.body);
}
});
busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
tmpUploadPath = path.join(__dirname, "uploads/", filename);
targetPath = path.join(__dirname, "userpics/", filename);
self.imageName = filename;
self.imageUrl = filename;
file.pipe(fs.createWriteStream(tmpUploadPath));
});
req.pipe(busboy); // start piping the data.
console.log(req.body) // outputs nothing, evaluated before busboy.on('field')
// has completed.
});
UPDATE 연결할 때-웨이터을 사용하고 있습니다 :
여기 내 고장 코드입니다. 내 익스프레스 설정 파일에이 미들웨어 코드를 사용하여 내 경로 내의 req.body 객체에 대한 액세스 권한을 부여했습니다. 또한 내 경로에서 파일 업로드를 처리하고 req.busbuy.on ('end')에 액세스 할 수 있습니다.
// busboy middleware to grab req. post data for multipart submissions.
app.use(busboy({ immediate: true }));
app.use(function(req, res, next) {
req.busboy.on('field', function(fieldname, val) {
// console.log(fieldname, val);
req.body[fieldname] = val;
});
req.busboy.on('finish', function(){
next();
});
});
난 당신이 코드가 어떻게 작동하는지 설명 될까요 같은 문제가 있어요? 별도의 경로에서 처리되는 모든 요청이 있으며이 솔루션은 내 코드에서 작동하지 않습니다. 아마도 당신의 행동이 내 문제를 해결하는 데 도움이 될지에 대해 더 잘 이해한다면 어떨까요? 이것은 첫 번째 노드 프로젝트입니다. – Jeffpowrs
@JeffPowers 필자는 생각했던 것처럼 미들웨어를 작동시키지 못했습니다. 필드를 구문 분석하고 필드 데이터로 무언가를 수행 한 다음 나중에 파일을 구문 분석 한 다음 busboy.on ("finish")을 호출하는 등 "다른"위치에서 들어오는 Multipart 데이터를 구문 분석하는 현재 솔루션은 없습니다. 내 게시물을 참조하십시오 : http : //programmers.stackexchange.com/questions/239170/how-to-parse-multipart-field-file-data-separately 알려 주시면 알려주세요. 나는 내 컨트롤러에 1 톤의 로직을 넣는 것을 끝내었다. 좋은 디자인 선택은 아니지만 포기했다. – Scott
나는 같은 결론에 도달했다. 실제로 나는 멀더에 대한 버스 승무원을 바꾸었다 : https://github.com/expressjs/multer. 훨씬 더 간단했습니다. – Jeffpowrs