2016-12-17 41 views
0

我可能會錯誤地措辭問題...不正確的快速路線被觸發?

我想使用Node.js,Express,MongoDB(貓鼬)做一個URL縮短。

我已經設置它,以便當用戶加載主頁時,它們被重定向到主頁。

// horribly designed home page 
app.get('/', function(req, res){ 
    res.render('index'); 
    res.end(); 
}); 

這部分工作。用戶成功看到主頁。

但後來,我也有下面的代碼:

// redirects to corresponding url 
app.get('/:digits', function(req, res){ 
    console.log('getting full url from database'); 
} 

每當用戶導航到主頁(/),也觸發這條道路,我看到了「從數據庫中獲取完整的URL」在控制檯。

這是爲什麼?

Full code is here

+0

瀏覽器正在發送'/ favicon.ico'的請求,因此'/:digits'路徑也被觸發。 將curl請求發送到您的主頁,如'curl http:// localhost:3000 /',您將看到'/:digits'路由未被觸發。 – dikesh

回答

0

檢查出路由,這部分參數

http://expressjs.com/en/guide/routing.html 從官方文檔:

此請求URL:

http://localhost:3000/users/34/books/8989 

將被路由到該路徑:

/users/:userId/books/:bookId 

和req.params對象將

{ "userId": "34", "bookId": "8989" } 

你的情況:當我試圖在鉻我req.params.digits爲 'favicon.ico的'。

這意味着瀏覽器正在兩個請求:

  1. 以 '/' 路徑
  2. 爲 '/favicon.ico'

第二個請求是爲什麼路由觸發。

你可以嘗試添加console.log代碼,看看你的瀏覽器發送

app.get('/:digits', function(req, res){ 
    console.log('getting full url from database'); 
    console.log(req.params.digits); 
}); 

您還可以使用「開發人員選項」(鉻),螢火蟲(火狐)來驗證。

+0

嗯,這很奇怪。我無法弄清楚爲什麼req.params.digits會是'favicon.ico' –

+0

我也不知道爲什麼每次瀏覽器發出主頁請求時都會觸發app.get(/:digits) –

+0

該請求適用於/favicon.ico,它是webiste圖標。這是基於我的解釋觸發的。 – RLaaa

0

我正在瀏覽你的代碼,我想你可能會錯過幾件事情。

你有'意見'文件夾設置?通過使用res.render,express期望使用'ejs'視圖引擎從'views'文件夾呈現'視圖'。

我發現,如果沒有在我的結構中明確定義的文件夾,那麼在路由時就會出現問題。

+0

是的,我有一個index.ejs裏面的視圖文件夾。對不起,應該提到在原帖 –

+0

不知道這是否有幫助...但你有沒有嘗試在你的res.render()語句後註釋res.end()? –

+0

不知道這是否有幫助...但你有沒有嘗試在你的res.render()語句之後註釋掉res.end()?不知道它是否會有幫助...但我也會檢查你是如何渲染你的靜態文件的。 ('/ static',express.static(path.join(__ dirname,'public'))) https://expressjs.com/en/starter/static-files.html –