2017-01-27 47 views
1

は、このようなURLを考えてみましょう: //次のメソッドを使用します。クエリ文字列からURLを抽出

app.get("/something/:qstr",function(req,res){ 

    console.log(req.params.qstr); 
}; 

は、しかし、これはhttpのみになるまで動作します: - >できるだけ早く//それはもはや私は全体のURL文字列を取得する方法を知りたいreq.params.qstrに含まれて遭遇されていないよう。どうすればこれを達成できますか?

ありがとうございます。

+0

これは有効なURLではありません。パス内のURLコンポーネントが[URLエンコードされている]必要があります(https://en.wikipedia.org/wiki/Percent-encoding)それがあなたのために働いていない理由かもしれません。このデータはどこから入手していますか? –

+0

私が達成しようとしているのは、何かの後に入力されるたびに、2番目のURLをデータベースに保存し、その部分を抽出してdbに保存しようとしています。 – JohnSnow

+0

しかし、なぜこの壊れた方法で構造化されたURLを最初に受け取るのですか? –

答えて

2

あなたは正規表現を使用して、これを試すことができます。

var app = require('express')(); 

app.get(/^\/something\/(.*)/, function (req, res) { 

    console.log(req.params[0]); 
    res.json({ok: true}); 

}); 

app.listen(3333,() => console.log('Listening on 3333')); 

あなたが実行すると:

curl http://localhost:3333/something/http://www.some-other-site.com 

サーバー版画:

http://www.some-other-site.com 

をあなたが望んでいたよう。

res.json({ok: true});は何らかの応答しか返さないため、curlは永遠にハングしません。

+0

res.jsonをres.send()に変更すると、戻って200になります –

+0

これで解決しました。あなたはすぐに正規表現を説明してくださいできますか?それはちょうどスラッシュ右の後まですべてをつかむことを言っているのですか? – JohnSnow

+0

もし私がapp.get()を実行すると、app.useで同じことをしても動作しません。 app.use(/ \/new \ /(。*)/、エラー); - error.js - > router.get( "/"、function(req、res){ console.log(req.params [0]) res.send(req.params [0]) } ); 助けてください – JohnSnow

関連する問題