2011-09-12 3 views
0

私はちょうどヘッドアップ、CoffeeScriptを使用しています:expressJSでは、resとreqは関数に渡されますか?

searchResults = (err, data)-> 
    res.write 'hello' 
    console.log data 
    console.log 'here' 
    return 


exports.search = (req, res) -> 
    res.writeHead 200, {'Content-Type': 'application/json'} 
    location = req.param 'location' 
    item = req.param 'item' 

    geoC = googlemaps.geocode 'someaddress', (err, data) -> 
     latLng = JSON.stringify data.results[0].geometry.location 

     myModule.search latLng, item, searchResults 

     return 
    return 

searchResults機能を約resを知らないので、どのように私は、ブラウザにデータを返すことができますか?

答えて

1

これはかなり一般的なシナリオです。 1つの方法は、exports.searchの中にsearchResultsを定義することですが、exports.searchは扱いにくくなる可能性があります。

resが引数でない場合、resを使用するようにsearchResultsを定義することは意味がありません。しかし、同じ状態にアクセスする必要がある複数のコールバックがある場合、繰り返しのコードにつながるいくつかの引数を持つ関数を持つことを嫌うかもしれません。 1つの良いオプションは、その状態を格納するために単一のハッシュを使用することです。この場合、あなたのコードはmyModule.searchが今だけstateハッシュとコールバックを取ること

searchResults = (err, data, {res}) -> 
    ... 

exports.search = (req, res) -> 
    res.writeHead 200, {'Content-Type': 'application/json'} 
    location = req.param 'location' 
    item = req.param 'item' 
    state = {req, res, location, item} 

    geoC = googlemaps.geocode 'someaddress', (err, data) -> 
     state.latLng = JSON.stringify data.results[0].geometry.location 
     myModule.search state, searchResults 
     return 
    return 

お知らせのようになります。第3引数としてstateハッシュをそのコールバック(searchResults)に渡します。このコールバックは、非構造化引数の構文を使用してresをハッシュから取り出します。

1

標準バインドが行います。

myModule.search latLng, item, searchResults.bind(null, res) 

... 

searchResults = (res, err, data)-> 
    res.write 'hello' 
    console.log data 
    console.log 'here' 
    return 
関連する問題