2016-09-21 35 views
0

我有兩條路線:app.use服務於靜態文件。不同參數的ExpressJS路由

app.use('/test', earlyAccess(), express.static(path.join(__dirname, staticFolder))) 

app.get("/test", callback); 
app.get("/test/:id", callback); 

// Here is the callback 
var fileStream = fs.createReadStream(staticFolder + '/test.html'); 
fileStream.on('open', function() { 
    fileStream.pipe(res); 
}); 

從瀏覽器中,如果我撥打localhost:80/test/1 - 工作正常。 但如果我打電話localhost:80/test - 它會被重定向到主頁面。在服務器控制檯中,我收到了304條警告。

如何在expressjs中使用基於參數的路由?

+0

304僅指示文檔未被修改。 '/ test'中的回調是做什麼的? –

+0

加載HTML。 test /:id和/ test加載相同的html頁面。 – user2325247

+0

你可以提供回調函數嗎?! –

回答

-3

你可以嘗試這樣的:

app.use("/test/*", (req, res, next) => { 
    // your callback(req, res); 
    next(); 
}); 
app.get("/test/:id", callback); 

app.use,意味着你可以寫一箇中間件,它接下來會調用();

+0

而且,這是如何回答原始問題的? – jfriend00

+0

不是。它不起作用。 – user2325247

+0

這不適用於這個問題,它是泛化的路線。 –

0

嘗試使用res.sendFile代替fs.createReadStream,是這樣的:

res.sendFile('test.html'); 
+0

問題在於它不會觸及/ test的回調。 – user2325247

+0

沒有道理,除此之外還有更多路線?無論如何,res.sendFile比fs.createReadStream更好,用於返回文件。 –

+0

我不明白,你更多的路線是什麼意思?/test或/ test/1應該爲我加載html頁面。 – user2325247

0

您可以檢查回調中的請求參數,

在請求
app.get('/test', callback); 
app.get('/test/123', callback); 

// callback 
if(req.params.second) { 
    // code for route with param. - /test/123 
} 
else { 
// code for route without param. - /test 
} 

參數都存儲在req.params爲

{first:'NameOfRoute', second:'NextParam'} ... 

因此,在這裏,

{first:'test', second:'123'} 
+0

我明白了。但它從來沒有達到回調。 – user2325247