Это довольно распространенный сценарий.Одним из вариантов является определение 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
из хэша, используя синтаксис аргумента деструктурирования.