2013-03-22 2 views
3

В экспресс app.js я определяю uploadDir = "./tmp", но как я могу получить к нему доступ позже?Как я могу получить доступ к атрибуту uploadDir Express?

app.configure(function(){ 
    app.set('port', process.env.PORT || 3000); 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'jade'); 
    app.use(express.favicon()); 
    app.use(express.logger('dev')); 

    app.use(express.bodyParser({uploadDir:'./tmp', keepExtensions: true})); // <-- 

    app.use(express.methodOverride()); 
    app.use(app.router); 
    app.use(express.static(path.join(__dirname, 'public'))); 
}); 
+0

Используйте методы файловой системы для доступа к файлу ... например fs.read и т. Д. – almypal

+0

какой файл вы имеете в виду? Я имею в виду здесь конфигурационную переменную uploadDir, которая изначально из node-formidable (соединение использует грозное и экспресс-использование connect, поэтому эта переменная используется косвенно также выражением), но я не знаю, как получить доступ к ней из выражения. Из грозного он будет с IncomingForm.uploadDir возможно – static

+0

Если форма для загрузки похожа на это ... ', то к нему можно получить доступ как var tmp_path = req.files.avatar .дорожка; – almypal

ответ

3

Аргументы промежуточному как bodyParser идти прямо через ППО. Все промежуточное ПО Express поддерживается Connect, поэтому он даже ничего не знает о Express. uploadDir фиксируется в multipart закрытии multipart middleware. Он хранится через закрытие и никогда не хранится нигде или не передается в Express, поэтому единственный способ получить доступ к исходному значению - это получить доступ к нему как часть исходного объекта options. Другого пути нет.

Если вы хотите, чтобы это значение было доступно, прочитав с app (как вы сказали в своем комментарии), вы должны установить его там отдельно. Тем не менее, этот метод немного уродлив и означает, что вы должны установить значение дважды.

app.set('uploadDir', './tmp'); 
+0

означает ли это, что тогда мне даже не нужно устанавливать 'uploadDir' через промежуточное программное обеспечение: 'app.use (express.bodyParser ({uploadDir: './ tmp ', keepExtensions: true})); '? поэтому 'app.set ('uploadDir', './tmp');' делает это уже или это просто атрибут, который я установил для приложения? – static

+0

@static Нет, вам все равно нужно передать его на 'bodyParser'. Промежуточное ПО не знает о приложении, и приложение не знает знаний о промежуточном программном обеспечении (обычно). – loganfsmyth

+0

hm, не совсем то, что я хочу. Поэтому, если я изменю uploadDir - мне нужно сделать это дважды, или мне нужно написать метод wrapping для его установки дважды. – static

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