2015-08-14 42 views
0

我正在用漂亮的標準構建一個快速服務器。我一直無法得到express.router()正確執行我的路由,這導致我更深入地瞭解當運行快速應用的服務器請求頁面時實際發生的情況。快速app.js是否在每個請求上運行?

console.log('App.JS has ran!'); 
var http = require('http'); 
var express = require('express'); 
var app = express(); 
var server = http.createServer(app); 
var mongoose = require('mongoose'); 
mongoose.connect('mongodb://52.27.161.16'); 
mongoose.connection.on("connect",function(err) { 
    if (err) throw err; 
    console.log('hello found!'); 
}); 
var bodyParser = require('body-parser'); 
app.use(bodyParser.json()); 
var router = express.Router(); 
router.get('/hi'), function (req, res) { 
    res.send('/hi route response'); 
}; 
router.get('/', function(req, res) { 
    res.send('default route reached'); 
}); 
app.use('*', router); 
server.listen(config.server.listenPort); 

漂亮的標準的東西,但出於某種原因,每當我瀏覽到本地主機:端口/ HI我只是從/路徑獲得res,即router.get('/', function{} (res.send('default route reached'));

所以,我更感興趣的是什麼在幕後發生。我注意到服務器只在第一次請求時向終端登錄與bodyParser無關的輸出。也就是說,文件頂部的console.log只在應用程序啓動時運行,並且從未在後,儘管bodyParser正確記錄了每個請求實例的請求。

請求發送到服務器時發生了什麼? app對象和路由是否被緩存並被服務?爲什麼app.js不針對每個請求重新評估?是否只有router對象負責發送請求?

這將有助於知道這一點,找出爲什麼我的router沒有響應正確的路線。

非常感謝!

+0

當你說你瀏覽到'/ hi',是在瀏覽器中,還是你真的在做一個post請求? – snozza

+0

您是否通過瀏覽器獲取或發佈請求? – Subburaj

+0

輕微的錯誤,它實際上是'''.get'''。固定!感謝您的支持。 –

回答

2

應用程序對象是您正在創建的快速應用程序。它基本上是包含所有快速功能的快速模塊的包裝。它基本上減少了處理對服務器的請求,呈現HTML視圖,註冊模板引擎等所需的代碼。這個應用程序對象被傳遞到正在創建的服務器對象,並且服務器不斷偵聽端口中的請求您已配置。所以,當服務器運行時,應用程序對象只被啓動一次,並且對服務器的請求由節點事件循環處理。

+0

這是一個很好的解釋。 –