0

私は小グループのブログを書いています。アプリの特定のルーティングで問題が発生しました。明確にするために、私は簡単なデモアプリを作成しました。

//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 :(

どのリクエストも処理できません。以下のすべてのケースが上位ルートで提供される可能性があるためだと思います。そして実際、私が理解しているように、/bobと/234234を提供するNodeには実際の違いはありませんが、そのようなURLのshoulbは別々に提供されます!1つはユーザープロファイルを表示するためのもので、2つ目は投稿を表示するためのものです。また、/ 23423423 / commentは、投稿#23423423のコメントとして提供する必要がありますが、/ bob / commentは無視して、/bobにリダイレクトする必要があります。ただし、/ music –はユーザー名ではなく、ハッシュタグであり、/ music / comment –は投稿#musicのコメントではなく、ハッシュタグ音楽のサブカテゴリなどです。このリストは続行できます...

主な質問: Node.JSルートを(マスクによって)異なる方法でURLに類似させる方法は?

ありがとう!

4

1 に答える 1

2

ルートで正規表現を使用できます。

試す:

//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 + '!');
});
于 2012-09-21T09:14:41.237 に答える