2016-06-27 4 views
0

中に私は今、私が送るべきget関数を持つビューと店からいくつかの情報が機能NodeJSエクスプレスパス値リダイレクト

router.post('/searchbook', function(req, res, next){ 
    var s_book_name="n/a"; 
    var s_author_name="n/a"; 
    var s_isbn13_id="n/a"; 

    var isbn=req.body.isbn; 
    var url="http://isbndb.com/api/v2/json/63JEP95R/book/"+isbn; 
    request({ 
    url: url, 
    json: true 
    }, function (error, response, body) { 
      if (!error && body.data!=null && response.statusCode === 200) { 
       if(body.data[0].title!=null) 
        s_book_name=body.data[0].title; 
       if(body.data[0].author_data[0]!=null) 
        s_author_name=body.data[0].author_data[0].name; 
       if(body.data[0].isbn13!=null) 
        s_isbn13_id=isbn; 
       } 
      else 
      { error="Book not found. Please enter the information manually."; 
      res.redirect('/newbook'); 
      } 
    }).then(function() { 
     res.redirect('/newbook2'); 
     }); 
    }); 

のスコープ内で宣言された変数の値を処理していますGET、POST機能を持っていますこの情報を別のビューに表示します。

router.get('/newbook2', function(req, res){ 
    res.render('newbook2', {title: 'Add New Book',s_book: s_book_name, s_author: s_author_name, s_isbn13: s_isbn13_id ,s_publisher: s_publisher_name , s_category: s_category_id}); 
    }); 

ただし、ビューの情報は常に未定義として表示されます。 get関数で使用される値はスコープの外にあると私は信じています。グローバル変数を使うべきですか?これを行う別の方法がありますか?

答えて

2

app#localsを使用して、アプリ全体で利用可能な変数を設定する必要があります。

それとも、クエリ文字列パラメータを使用してデータを渡すと、あなたがreq#query

app.get('/path',function(req,resp){ 
     req.query // get querystring 
}) 
+0

あなたはルータ 'のような意味に使用することができますexpressJs

var url = require('url'); http.createServer(function(req,res){ var url_parts = url.parse(req.url, true); var query = url_parts.query; console.log(query); // }) 

expressJSを使用しない

を使用してアクセスすることができます。res.render( 'newbook2'、{s_book:req.s_book_name ... 'まだ動作していません。まだ定義されていません。 –

+0

No.reso.renderは、現在のreq-respサイクルでのみ動作し、リダイレクトでは機能しません –

関連する問題