2017-01-20 5 views
0

私はExpressを学びたいと思っていますし、bit.lyのウェブページ(URL短縮ツールなど)を作成しようとしています。ページに表示されているものはすべて表示されますが、ページをリフレッシュするとリンクはまだありますが、サーバーを再起動するまで消えません。私は新しいリンクを生成することができ、それは置き換えられますが、私がページをリフレッシュすると、それは消えません。ページの内容はリフレッシュ時でも常に表示されます

エクスプレス:任意の入力のための

var data; 
var url; 

/* GET home page. */ 
router.get('/', (req, res, next) => { 
    //var d_20803340c40722494a7c737b0725d0178d4e1d40; 
    res.render('index', { 'data': data, 'link': url }); 
}); 

/* POST HANDLER */ 
router.post('/link', function(req, res, next) { 
    var pattern = /^((http|https|):\/\/)/; 
    url = req.body.link; 

    if (!pattern.test(url)) 
    { 
     url = "http://" + url; 
     bitly.shorten(url) 
     .then(response => { 
      data = response.data.url; 

      res.redirect('/'); 
     }); 
    } 
}) 

感謝。

答えて

0

お客様のvar data;およびvar url;は、get機能の外にあるグローバルスコープにあります。これは、'/link'への投稿時に、urldataを設定すると、プログラム内のグローバルスコープに設定され、個々の要求の外にあることを意味します。これらの値をres.renderに送信しているので、設定されると、get要求ごとにクライアントに渡されます。

あなたがリフレッシュしているのは、プログラムが個々のリクエストの範囲外に格納されているためです。新しいGETリクエストとレンダリングをリフレッシュすると、毎回値。

+0

ああ、私はこのための修正プログラムになる可能性があるので、テンプレートエンジンに変数を引き渡し、投稿リクエストの情報でこれらの値を変更することはできますか? – bexo

+0

@bexoあなたがしたいことに応じて、多くの方法があります。最初に気になることは、 '' /?data = ...&link = ... ''にリダイレクトして、' 'get'ルートにクエリ文字列でそれらを見つけた場合にのみそれらを送りさせることです。次に、クエリ文字列のないページにリダイレクトするホームリンクを含めます。もう1つの答え(私ははるかに気に入っています)は、 'post'がリダイレクトを行う代わりにデータを持つJSONオブジェクトを返すようにすることです。次に、クライアントからPOST非同期を行い、データを表示します。 –

関連する問題