2013-03-22 21 views
3

在express app.js中,我定義了uploadDir =「./tmp」,但是如何在稍後訪問它?如何訪問express的uploadDir屬性?

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 2013-03-22 03:57:05

+0

你的意思是哪個文件?我的意思是這裏的config變量uploadDir,它本來就是來自node-formidable(連接使用強大和快速使用連接,所以這個變量也是通過express來間接使用),但我不知道,如何從express中訪問它。從強大的它將與IncomingForm.uploadDir可能 – static 2013-03-22 04:07:22

+0

如果上傳的形式是這樣的... '那麼它可以被訪問爲var tmp_path = req.files.avatar 。路徑; – almypal 2013-03-22 04:11:05

回答

3

中間件的參數如bodyParser直接進入中間件。所有Express中間件都由Connect提供,所以它甚至不知道有關Express的任何信息。在multipart middlewaremultipart關閉中捕獲uploadDir。它通過閉包存儲,並且永遠不會存儲在其他任何地方,或者傳遞到Express,因此訪問原始值的唯一方法是作爲最初傳入的options對象的一部分訪問它。沒有其他方法。

如果您希望通過從app(如您在評論中所述)中讀取來訪問該值,那麼您應該自己單獨設置它。也就是說,這種方法有點難看,意味着你必須設置兩次值。

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

是否意味着,那我甚至不需要通過中間件設置'uploadDir':'app.use(express.bodyParser({uploadDir:'./ tmp',keepExtensions:true}));'?所以'app.set('uploadDir','./tmp');'它已經做到了,還是隻是我設置給應用程序的一個屬性? – static 2013-03-22 04:31:29

+0

@static不,你仍然需要將它傳遞給'bodyParser'。中間件不知道應用程序,應用程序沒有對中間件的瞭解(通常)。 – loganfsmyth 2013-03-22 04:35:59

+0

嗯,不是我想要的。因此,如果我將更改uploadDir - 我需要做兩次,或者我需要編寫一個方法來設置它兩次。 – static 2013-03-22 17:56:26