2014-09-08 3 views
0

stackoverflow에서 답변을 많이 읽었지만 며칠 후에도 제대로 작동하지 않습니다. 표현과 노드가있는 첫 주입니다. 그래서 제가 작은 일을 제대로하고 있는지 알 수 없습니다. 기본적으로 파일을 업로드하고 나중에 파일 시스템에 저장하려고하지만 req.files를 사용하여 정의되지 않은 상태로 진행할 수 없습니다. 아래 내 코드를 참조하십시오.express js에서 파일 업로드시 다시 문제가 발생합니다

이는 /이 내 경로 내 app.js

var express = require('express'); 
var path = require('path'); 
var favicon = require('static-favicon'); 
var logger = require('morgan'); 
var routes = require('./routes/index'); 
var users = require('./routes/users'); 
var upload = require('./routes/upload.js'); 

var app = express(); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 

app.use(favicon()); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded()); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.use('/', routes); 
app.use('/users', users); 
app.use('/upload', upload); 

/// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
var err = new Error('Not Found'); 
err.status = 404; 
next(err); 
}); 

/// error handlers 

// development error handler 
// will print stacktrace 
if (app.get('env') === 'development') { 
app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
     message: err.message, 
     error: err 
    }); 
}); 
} 

// production error handler 
// no stacktraces leaked to user 
app.use(function(err, req, res, next) { 
res.status(err.status || 500); 
res.render('error', { 
    message: err.message, 
    error: {} 
}); 
}); 


module.exports = app; 

입니다 upload.js

var express = require('express'); 
    var router = express.Router(); 

    /* GET home page. */ 
    router.get('/', function(req, res) { 
    console.log(""); 
    console.log(req.files); 
    res.send('this is the page you get upon doing file upload'); 
    }); 

    module.exports = router; 

이 내 의견/homepage.jade입니다

doctype html 
html 
head 
    title= title 
    link(rel='stylesheet', href='/stylesheets/style.css') 
body 
    p select file to upload 
    form(action="upload", method="get", enctype="multipart/form-data") 
    input(type="file", name="displayImage") 
    input(type="submit") 

현재 multer, connect-busboy, bodyParser와 같은 용어는 express4 등에서 더 이상 사용되지 않지만 계속 진행하는 방법에 대해서는 전혀 알지 못합니다. 진행 방법과 추가 할 코드에 대해 알려주십시오.

감사합니다.

답변

0

많은 모듈이 Express in 4.0에서 제거되었으며 현재 포함되어야합니다. separate packages입니다. 시작하는 가장 쉬운 방법은 express-generator을 사용하여 발판을 생성하는 것입니다. 여기에는 쿠키를 파싱하기위한 올바른 패키지와 요청 본문이 포함되어 있어야합니다. 그러나 파일 파서는 포함되지 않습니다. multer를 사용하여 예제를 작성하고 Github for you to reference에 넣습니다.

복제 한 후 npm install을 실행 한 다음 npm start을 실행할 수 있습니다.

제가 잘못 고친 다른 한 가지는 업로드 처리기에 app.get을 사용하는 것입니다. GET을 사용하여 파일을 업로드 할 수 없습니다. 나의 예에서는 이것을 POST 요청으로 변경했다. 다음은 관련 스 니펫입니다.

는 방향 주셔서 감사합니다,

var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
var multer = require('multer'); 

var routes = require('./routes/index'); 
var users = require('./routes/users'); 
var upload = require('./routes/upload'); 

var app = express(); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 
app.use(multer({ dest: './uploads/'})) 

// uncomment after placing your favicon in /public 
//app.use(favicon(__dirname + '/public/favicon.ico')); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.use('/', routes); 
app.use('/users', users); 
app.use('/upload', upload); 

// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

// error handlers 

// development error handler 
// will print stacktrace 
if (app.get('env') === 'development') { 
    app.use(function(err, req, res, next) { 
     res.status(err.status || 500); 
     res.render('error', { 
      message: err.message, 
      error: err 
     }); 
    }); 
} 

// production error handler 
// no stacktraces leaked to user 
app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
     message: err.message, 
     error: {} 
    }); 
}); 


module.exports = app; 

index.jade

extends layout 

block content 
    h1= title 
    p select file to upload 
    form(action='upload', method='post', enctype='multipart/form-data') 
    input(type='file', name='displayImage') 
    input(type='submit') 
+0

예를 들어 주셔서 감사합니다. 얼마나 유용했는지 말할 수는 없습니다. 나는 며칠 동안 bodyParser와 같은 것들을 시도했지만 아무런 운이 없었습니다. 나는 나중에 가서 다른 이미지 디렉토리 등등에 파일을 저장하는 코드를 수정했습니다. 다시 한 번 감사드립니다 :) – IAMTubby

1

업로드 된 파일을 구문 분석 할 수있는 미들웨어 모듈이 필요합니다. 이러한처럼

:

app.use(multer({ dest: './uploads/'})) 

또는

:

은 다음과 같이 당신의하는 index.js에 미들웨어를 사용3210

app.use(busboy()); 
+0

app.js.나는 그것이 멀터를 사용하여 일할 수있었습니다. – IAMTubby

+0

내 대답을 받아 들일 수 있습니까? :) – Pepijn