1

これに似ている

私は次のルートを持っています:
app.get('/blogpost/:link', middleware.loginCheck, blog.postBlogs);

を使用req.params.linkすると、リンク パラメータが返されます。
を求めると、req.params.linkmiddleware.loginCheck届きますundefined

次のようreq.params.linkにアクセスできるため、ミドルウェアに渡されていないようです。
app.get('/blogpost/:link', function(req, res){console.log(req.params.link)});

私のミドルウェアの問題は何ですか?

FINAL
a(href='/post/#{post.link}') #{comments}レンダリング/post/myPostLink

{#post.link}/
a(href='/post#{post.link}') #{comments}変数の代用をレンダリングするだけで、追加のrenders '/postmyPostLink' を追加しません

a(href='/post/' + post.link) #{comments}レンダリング/post/myPostLink

したがって、両方#{post.link}またはpost.link同じようにreq.params.link機能し、両方の呼び出しで機能します。

UPDATE_2 Web ページのレンダリング
に使用しています。jadeその中に次のように記述されたアンカー タグがあります a(href='/post/#{post.link}) #{comments}
。 achor タグは正常に機能し、正しいページに誘導します。しかしexpress、この表現は好きではありません。代わりに、アンカータグを変更すると正常にa(href='/post/' + post.link) #{comments} req.params.link動作します。


req.param('link')この場合、UPDATE_1が機能します。
ミドルウェアに問題はありません。
しかし、なぜうまくいかないのでしょうreq.params.linkか?

4

3 に答える 3

2

OK、コメントを少し行ったり来たりしましたが、問題はURLのダブルスラッシュにあると思います

a(href='/post/#{post.link}') #{comments}

これはA)終了引用符が欠落していることですが、これはコードではなく、ここでの質問のタイプミスだと思います。B)本当の問題はpost.link、先頭にスラッシュが含まれていることです。そのため、最終的に次のHTMLになります。

<a href='/post//post_link_name'>42</a>

したがって、expressはそれを空の:linkパラメーターとして解析しています。翡翠を次のように変更します。

a(href='/post#{post.link}') #{comments}

そして、あなたはビジネスに戻るべきです。

于 2012-11-15T23:08:27.130 に答える
0

Expressの最近のバージョンではrouter.param()、ミドルウェアとして使用して、特に次の作業を行うことができますreq.params

var router = express.Router();

router.param( "nickname", function (req, res, next, nickname) {

    console.log( "nickname: ", nickname );
    next();
});

router.get( "/user/:nickname", myController.method );
于 2015-05-31T08:40:45.463 に答える
-1

の署名はmiddleware.loginCheckどのように見えますか?を返す必要がありますfunction(req, res, next)

于 2012-11-15T22:56:07.893 に答える