2016-01-18 65 views
1

設置express.static這工作無法從另一個模塊

var express = require('express'); 
var app = express(); 
var request = require('request'); 

// initialize session, redis server will be used if it's running otherwise will store in memory 
require('./config/session.js')(app, function() { 
    // configurations 
    require('./config/bodyparser.js')(app); 
    require('./config/cookieparser.js')(app); 
    require('./config/compression.js')(app); 
    //require('./config/other.js')(app, express); 
    app.use(express.static('./public', { /*maxAge: 86400000*/})); 

    app.listen(3000, function() { console.log('running...'); }); 
}); 

但如果我取消需要other.js和評論app.use事實並非如此。這是other.js文件。

module.exports = function (app, express) 
{ 
    app.use(express.static('../public', { /*maxAge: 86400000*/})); 

    return app; 
} 

嘗試了不同的親屬路徑,但都失敗了。下面是項目結構

-config 
--other.js 
-public 
-app.js 

我得到的錯誤是

Cannot GET /index.html

在我的瀏覽器,在控制檯沒有錯誤。

+0

任何錯誤信息解決正確

信息?請問您的意思是「它不起作用」是什麼意思? –

+0

你對我會編輯我的問題 – Almis

+0

如果你更新other.js使用'./ public'作爲靜態文件夾它是否工作? – SlashmanX

回答

2

這裏的問題是,當你的require other.js文件中,相對路徑使用的是cwd app.js。避免這種情況(避免相對路徑的麻煩)的最好方法是使用path.resolve__dirname變量。

__dirname是一個特殊的Node.js變量總是等於它在文件的當前工作目錄。因此,與path.resolve結合,你總是可以肯定,無論該文件正在require倒是它使用了正確的路徑。

在other.js:

var path = require('path'); 
.... 
app.use(express.static(path.resolve(__dirname, '../public'))); 

或者你可以簡單地更新other.js使用./public但我相信上面是更好的做法,因爲如果你在不同的文件夾移動app.jsrequire other.js它不會在path.resolvehere