流星,在光纤外部访问MongoDB

时间:2015-09-04 18:03:32

标签: mongodb meteor coffeescript

我使用Meteor软件包 tomi:upload-jquery ,它使用光纤外部的回调。在一个回调中,我应该使用MongoDB,而MongoDB需要在光纤内运行。

经过大量未来尝试,光纤,deasync,Meteor.bindEnvironment,Meteor.wrapAsync,a.s.o。我找不到解决办法。

要回滚的回调是:

Meteor.startup ->
  UploadServer.init
    getDirectory: (fileInfo, formData) ->
      # begin some sort of wrapping
        dir = ''
        u = Meteor.users.findOne({"uploadToken.token": formData.uploadToken })
        if u
          dir = u.username
        else
          throw new Error 'Anonymous calls not permitted'
      # end some sort of wrapping
      console.log 'dir', dir
      return dir
  return

编辑1

此代码正在运行而不会崩溃,但它应该变为同步:

Meteor.startup ->
  UploadServer.init
    getDirectory: (fileInfo, formData) ->
      getDir = (formData,callback) ->
        Fiber(()->
          console.log '0:',formData
          dir = ''
          u = Meteor.users.findOne({"uploadToken.token": formData.uploadToken })
          if u
            dir = u.username
          else
            callback new Error( 'Anonymous file upload not permitted.' ), null
          console.log '1:',dir
          callback null,dir
        ).run()
      dir = getDir(formData, (e,r)->
        console.log 'e,r:',e,r
      )
      console.log '2:',dir
      return ''
  return

在日志中我得到:

I20150905-08:33:13.171(2)? 0: { uploadToken: 'K2eEiFMRMagSuoKqf' }
I20150905-08:33:13.173(2)? 2: undefined
I20150905-08:33:13.174(2)? 0: { uploadToken: 'K2eEiFMRMagSuoKqf' }
I20150905-08:33:13.175(2)? 2: undefined
I20150905-08:33:13.177(2)? 1: test
I20150905-08:33:13.177(2)? e,r: null test
I20150905-08:33:13.177(2)? 1: test
I20150905-08:33:13.178(2)? e,r: null test

getDirectory被调用两次。

现在缺少的是如何使代码同步。这是让return dir等待getDir

非常感谢任何建议和意见。

1 个答案:

答案 0 :(得分:0)

请参阅此问题的解决方案:Meteor Package for formidable

要在光纤内执行MongeDB命令,我在包tomi:upload-server中包装了一个事件处理程序。