2015-06-20 63 views
0

我正在建立node.js express和Angularjs的網站。 整個網站是靜態的,我爲它服務通過公共像這樣:Nodejs快速捕捉到服務器上的公共文件的電話

app.use(express.static(path.join(__dirname, 'public'),{})); 

我如何能趕上在表達一個特定的頁面調用?

我嘗試這樣做:

app.all("/app",multipart,function(req, res, next){ 
    console.log("Checking if the user is logged");   
}); 

/app是一個靜態的HTML頁面,這是在public目錄,但我在的console.log斷點永遠不會被達到。 我試圖阻止訪問基本上靜態目錄中的某些文件。可能還有其他更好的方法。我打開了。

在此先感謝您的幫助。

回答

1

我創建了用於顯示我是怎樣把這個場景的例子。

項目,其中公共目錄包含了公共資產裏邊有用於存儲保護asssets一個保護目錄的目錄樹。

├── app.js 
└── public 
    ├── index.html 
    └── protected 
     └── app.html 

app.js文件我使用的是中間件app.use('/protected/*', ..)即會擊中前要執行的app.use(express.static(..));其中在這種中間件,我們要檢查是否允許用戶使用受保護的資產,如果他是允許,那麼我們稱下一個函數讓快遞繼續執行後續中間件,否則它將發送給用戶一個迴應,說他不允許使用資產。

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

var path = require('path'); 

function isUserAllowed(fn) { 
    fn(null, false); 
} 

app.use('/protected/*', function(req, res, next) { 
    isUserAllowed(function(err, allowed) { 
    if (!allowed) { 
     res.status(401).send('You are not allowed to see this page.'); 
    } else { 
     next(); 
    } 
    }); 
}); 

app.use(express.static(path.join(__dirname, 'public'))); 

app.listen(4000, function() { 
    console.log('server up and running'); 
}); 
3

我認爲你可以通過將它們放置在中間件express.static之上來簡單地區分期望的路線。例如:

app.all("/app",multipart,function(req, res, next){ 
    console.log("Checking if the user is logged"); 
    next(); // or end the request ? 
}); 

app.use(express.static(path.join(__dirname, 'public'),{}));