我正在使用CoffeeScript
,只是抬头:
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
,那么如何将数据返回给浏览器?
答案 0 :(得分:1)
标准绑定可以。
myModule.search latLng, item, searchResults.bind(null, res)
...
searchResults = (res, err, data)->
res.write 'hello'
console.log data
console.log 'here'
return
答案 1 :(得分:1)
这是一种非常常见的情况。一种选择是在searchResults
内定义exports.search
,但exports.search
可能会变得笨拙。
searchResults
以res
不是参数时使用res
的方式定义是没有意义的。但是您可能不愿意使用具有多个参数的函数,当您有多个需要访问相同状态的回调时,这可能导致重复的代码。一个好的选择是使用单个哈希来存储该状态。在这种情况下,您的代码可能类似于
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
请注意,myModule.search
现在只接受state
哈希和回调;然后它将state
哈希作为第三个参数传递给该回调(searchResults
),它使用解构参数语法将res
拉出哈希。