Хорошо, все еще в моем игрушечном приложении, я хочу узнать средний пробег на одометрах группы владельцев автомобилей. Это довольно легко на клиенте, но не масштабируется. Правильно? Но на сервере я точно не вижу, как это сделать.
Вопросы:
- Как вы реализуете что-то на сервере, а затем используете его на клиенте?
- Как вы используете функцию агрегации $avg для манго, чтобы использовать оптимизированную функцию агрегации?
- Или, альтернативно, (2) как вы делаете карту/сокращение на сервере и делаете ее доступной для клиента?
Предложение @HubertOG было использовать Meteor.call, что имеет смысл, и я сделал это:
# Client side
Template.mileage.average_miles = ->
answer = null
Meteor.call "average_mileage", (error, result) ->
console.log "got average mileage result #{result}"
answer = result
console.log "but wait, answer = #{answer}"
answer
# Server side
Meteor.methods average_mileage: ->
console.log "server mileage called"
total = count = 0
r = Mileage.find({}).forEach (mileage) ->
total += mileage.mileage
count += 1
console.log "server about to return #{total / count}"
total / count
Казалось бы, это работает нормально, но это происходит не потому, что, насколько я могу сказать, Meteor.call
- это асинхронный вызов, а answer
всегда будет иметь нулевой возврат. Обработка материалов на сервере кажется достаточно распространенным вариантом использования, который я, должно быть, просто что-то упустил. Что это будет?
Спасибо!