2016-02-29 21 views
0

文件夾結構節點如何我的應用程序找到index.js

  • 斌 - www.js

  • LIB - jsFiles ...

  • 車型 - jsFiles ...

  • node_modules -Folders and Files

  • publ IC - index.html的

  • 路線 - jsFiles ...

  • index.js

  • 的package.json

我用快遞,angular.js。服務器從www.js開始,它調用 index.js。之後,當我只輸入「localhost:3000」時,它顯示我 public/index.html。我沒有'/'路線,但它顯示我 'public/index.html'。我不明白這。請讓我知道關於這個過程的 。

www.js

var debug = require('debug')('example-server'); 
var app = require(process.cwd()+'/index'); 

//listen at 3000 port 
app.set('port',process.env.PORT || 3000); 


var server = app.listen(app.get('port'),function() 
{ 
    debug('Express server listening on port ' + server.address().port); 
}); 

index.js

var favicon  = require('serve-favicon'); 
var express  = require('express'); 
var path   = require('path'); 
var logger  = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
//Connection for DB 
require('./lib/connection'); 
var employees = require('./routes/employees'); 
var teams  = require('./routes/teams'); 
var app = express(); 

// Writing at routing table 
app.use(favicon(__dirname + '/public/favicon.ico')); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended:true })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname,'public'))); 

app.use(employees); 
app.use(teams); 


// send 404 to errorhandler 
app.use(function(err,req,res,next) 
{ 
    var err = new Error('Not Found'); 
    err.status = 404; 
    console.log(error); 
    next(error); 
}); 

... 
... 
module.exports = app; 
+0

我想你想明白:「爲什麼index.html得到服務,當你去/」對嗎? –

回答

0

在express.js中,註冊中間件的順序有很大的不同。

當express.js收到請求時,它從頂部開始並執行註冊的中間件。

中間件登記在使用app.use(middleware_goes_here)這種類型的中間件獲取無論您輸入的網址,另一方面有什麼執行,你也可以註冊一箇中間件喜歡在這種情況下app.use('/url/path',middleware_goes_here)我們註冊這個中間件明確應用「/ URL /路徑',所以這個中間件只有在你訪問'/ url/path'時纔會被執行(並且前一個匹配的中間件沒有在調用next()的時候服務請求)

這個app.use(express.static(path.join(__dirname,'public')));這行代碼行得通。

你可以去here (express.static ref)瞭解更多關於靜態內容服務和路由的信息。

基本上會發生的是,我們正在配置express.static中間件以「公開」文件夾「按原樣」提供靜態內容。因此,當你提出任何請求並且它與公共文件夾中的靜態內容相匹配時,它將提供服務,否則express.static將依次調用下一個中間件。

因此,在您的情況下,實際上服務器輸入請求的第一個中間件是express.static,沒有任何路由過濾器,因此即使沒有明確定義的路由,它也是服務器index.html。如果您public夾在public/javascript/jquery.js了文件,那麼下面的URL將映射到它http://localhost:3000/javascript/jquery.js

注意:您不必在URL中指定的「公共」,其中express.static註冊的方式,將服務器內容FROM 「公共」文件夾。

................

UPDATE:如何默認工作express.static

默認情況下,app.use(express.static(path.join(__dirname,'public')));這需要index.html作爲默認文檔。如果你想設置index2.html作爲你的默認文檔,你可以通過做這樣的事情做到這一點app.use(express.static(path.join(__dirname,'public'),{index: 'index2.html'}));

希望它有幫助。

+0

謝謝你的幫助!我瞭解大多數情況,但我仍然想知道myApp如何爲index.html提供服務。我只需要localhost:3000不是localhost:3000/index.html。是否有關於名稱'索引'的任何默認設置?當我修改名稱index.html - > index2.html它不是服務index2.html,它的響應404. –

+0

我已經更新了我的答案。請看一看。 –

+0

你可以參考這個類似的問題。 http://stackoverflow.com/questions/35649097/how-can-i-serve-my-web-app-with-node-express/35649993#35649993 –

1

將相對路徑到文件夾(一個向上在層次)。

var app = require('../index'); 
+0

哦,我的意思是,var app = require('../ index');在www.js文件中會調用index.js,但是當我請求'localhost:3000'時,它會顯示'public/index.html'文件。即使我沒有'/'路線。我不明白。 –

相關問題