簡體   English   中英

NodeJS + Express:如何以不同的方式制作類似的(通過掩碼)URL路由?

[英]NodeJS + Express: how to make similar (by mask) URLs route in a different way?

我正在寫一個小組博客。 我的應用程序中有一個非常具體的路由,我遇到了一些麻煩。 為了說清楚,我寫了一個簡單的演示應用程序:

//pathtest.js
//creating §
var express = require('express');
var app = express();
//setting express app
app.configure(function() {
    app.use("/static", express.static(__dirname + '/static'));
    app.use(express.bodyParser());
});
app.listen(3000);


//serving hashtag requests like /music, /photo, /personal, etc. 
app.get('/music', function(req, res) {
    res.send('music');
});
app.get('/photo', function(req, res) {
    res.send('photo');
});
app.get('/personal', function(req, res) {
    res.send('personal');
});
//... and +20+ more various hashtags

//serving SUBCATEGORIES for hashtags
//e.g.: /music/rock, /photo/digital
app.get('/:hashtag/:subcat', function(req, res) {
    res.send('Subcategory ' + req.params.subcat + ' for hashtag ' + req.params.hashtag);
});


//SINCE THIS LINE IT DOESNT WORK 'CAUSE EVERY OF THE FOLLOWING REQUESTS CAN BE SERVED WITH ONE OF 4 UPPER CASES :(

//serving usernames of our service
//We put it apecially AFTER SERVING HASHTAGS as they have similar mask, first should be checked if it's hashtag
//e.g.: /bob_johnson
app.get('/:user', function(req, res) {
    res.send('Welcome, ' + req.params.user + '!');
});

//serving single post service
//e.g.L: /163728
app.get('/:postid', function(req, res) {
    res.send('This is post #' + req.params.postid);
});

//serving post commenting
//e.g.: /35345345/comment
app.get('/:postid/comment', function(req, res) {
    res.send('Edit post #' + req.params.postid);
});

排隊后

//SINCE THIS LINE IT DOESNT WORK 'CAUSE EVERY OF THE FOLLOWING REQUESTS CAN BE SERVED WITH ONE OF 4 UPPER CASES :(

沒有任何請求可以提供。 我想這是因為以下每一種情況都可能與上層路線一起服務。 實際上,正如我所說,Node,serve / bob和/ 234234沒有實際的區別,但這樣的URL應該單獨提供! 一個 - 顯示用戶個人資料,第二個 - 顯示帖子。 和/ 23423423 /評論應該作為帖子#23423423的評論,但/ bob / comment應該被忽略並重定向到/ bob。 但/音樂 - 不是用戶名,它是一個標簽,而/音樂/評論 - 不是發表#music的評論,而是標簽音樂的子類別等。這個列表可以繼續......

主要問題:如何以不同的方式使Node.JS路由類似(通過掩碼)URL?

謝謝!

您可以在路線中使用RegExp。

嘗試:

//serving single post service
//e.g.L: /163728
app.get('/:postid(\d+)', function(req, res) {
    res.send('This is post #' + req.params.postid);
});

//serving usernames of our service
//e.g.: /bob_johnson
app.get('/:user', function(req, res) {
    res.send('Welcome, ' + req.params.user + '!');
});

要么:

//serving single post service
//e.g.L: /163728
app.get(/^\/(\d+)$/i, function(req, res) {
    res.send('This is post #' + req.params[0]);
});

//serving usernames of our service
//e.g.: /bob_johnson
app.get('/:user', function(req, res) {
    res.send('Welcome, ' + req.params.user + '!');
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM