Node.js meteor:在typescript中编写meteor方法时找不到模块光纤/未来

Node.js meteor:在typescript中编写meteor方法时找不到模块光纤/未来,node.js,angular,meteor,typescript,node-fibers,Node.js,Angular,Meteor,Typescript,Node Fibers,我使用类型脚本es6将meteor与angular2一起使用,在为异步函数编写meteor方法时遇到了这个错误。我在insert查询中遇到同步问题,因为当名称相同时,它没有向我提供insert错误。所以我决定使用fibers和future,但typescript一直给我一个错误,它找不到fibers/future的模块。 我试过了 meteor npm安装光纤, 流星npm安装未来, 流星添加奥斯特罗:neo4jdriver@1.0.2-光纤 但一切都不起作用。如果有什么解决办法,请告诉我。如果

我使用类型脚本es6将meteor与angular2一起使用,在为异步函数编写meteor方法时遇到了这个错误。我在insert查询中遇到同步问题,因为当名称相同时,它没有向我提供insert错误。所以我决定使用fibers和future,但typescript一直给我一个错误,它找不到fibers/future的模块。 我试过了 meteor npm安装光纤, 流星npm安装未来, 流星添加奥斯特罗:neo4jdriver@1.0.2-光纤 但一切都不起作用。如果有什么解决办法,请告诉我。如果有任何其他方法我可以用来解决这个问题,请让我知道

import { Emails } from '../collections/emails.collection';
import { check } from 'meteor/check';
import { Meteor } from 'meteor/meteor';
import Future from 'fibers/future';

Meteor.methods({
  loadEmailTemp: function(tempn: string){
    let temp = Emails.findOne({tempname: tempn});
    return temp;
  },
  getAllTemplates: function() {
    let temps = Emails.find({}).fetch();
    return temps;
  },
  newTemplate: function(tempn: string) {
    let err = false;

    let result = Emails.insert({
      tempname: tempn,
      subject: '',
      text: ''
    }, function(error, result){
      if(error){
        console.log("ERROR",error);
        err = true;
      }
      if(result) console.log("RESULT",result);
     });
     return result;
   }
});
我的错误是

W20161203-13:15:44.055(5.5)? (STDERR)        /Users/exMachina/.meteor/packages/meteor-tool/.1.4.2_1.1ulueqv++os.osx.x86_64+web.browser+web.cordova/mt-os.osx.x86_64/dev_bundle/server-lib/node_modules/fibers/future.js:280
W20161203-13:15:44.056(5.5)? (STDERR)                       throw(ex);
W20161203-13:15:44.056(5.5)? (STDERR)                       ^
W20161203-13:15:44.057(5.5)? (STDERR)
W20161203-13:15:44.057(5.5)? (STDERR) Error: Cannot find module 'fibers'
W20161203-13:15:44.058(5.5)? (STDERR)     at    Function.Module._resolveFilename (module.js:325:15)
W20161203-13:15:44.058(5.5)? (STDERR)     at Function.Module._load (module.js:276:25)
W20161203-13:15:44.058(5.5)? (STDERR)     at Module.require (module.js:353:17)
W20161203-13:15:44.059(5.5)? (STDERR)     at require (internal/module.js:12:17)
W20161203-13:15:44.059(5.5)? (STDERR)     at Object.<anonymous> (/Users/exMachina/.meteor/packages/ostrio_neo4jdriver/.1.0.2.1tve9ie++os+web.browser+web.cordova/npm/node_modules/neo4j-fiber/lib/helpers.js:33:11)
W20161203-13:15:44.059(5.5)? (STDERR)     at Object.<anonymous> (/Users/exMachina/.meteor/packages/ostrio_neo4jdriver/.1.0.2.1tve9ie++os+web.browser+web.cordova/npm/node_modules/neo4j-fiber/lib/helpers.js:62:4)
W20161203-13:15:44.060(5.5)? (STDERR)     at Module._compile (module.js:409:26)
W20161203-13:15:44.060(5.5)? (STDERR)     at Object.Module._extensions..js (module.js:416:10)
W20161203-13:15:44.067(5.5)? (STDERR)     at Module.load (module.js:343:32)
W20161203-13:15:44.067(5.5)? (STDERR)     at Function.Module._load (module.js:300:12)
W20161203-13:15:44.055(5.5)?(STDERR)/Users/exMachina/.meteor/packages/meteor tool/.1.4.2_1.1lueqv++os.osx.x86_64+web.browser+web.cordova/mt os.osx.x86_64/dev_bundle/server lib/node_modules/fibers/future.js:280
W20161203-13:15:44.056(5.5)?(标准)投掷(ex);
W20161203-13:15:44.056(5.5)?(标准)^
W20161203-13:15:44.057(5.5)?(标准)
W20161203-13:15:44.057(5.5)?(STDERR)错误:找不到模块“光纤”
W20161203-13:15:44.058(5.5)?(STDERR)位于Function.Module.\u解析文件名(Module.js:325:15)
W20161203-13:15:44.058(5.5)?(STDERR)在Function.Module.\u加载(Module.js:276:25)
W20161203-13:15:44.058(5.5)?(STDERR)位于Module.require(Module.js:353:17)
W20161203-13:15:44.059(5.5)?(标准)按要求(内部/模块js:12:17)
W20161203-13:15:44.059(5.5)?(STDERR)at对象。(/Users/exMachina/.meteor/packages/ostrio_neo4jdriver/.1.0.2.1tve9ie++os+web.browser+web.cordova/npm/node_modules/neo4j fiber/lib/helpers.js:33:11)
W20161203-13:15:44.059(5.5)?(STDERR)at对象。(/Users/exMachina/.meteor/packages/ostrio_neo4jdriver/.1.0.2.1tve9ie++os+web.browser+web.cordova/npm/node_modules/neo4j fiber/lib/helpers.js:62:4)
W20161203-13:15:44.060(5.5)?(STDERR)在模块处编译(Module.js:409:26)
W20161203-13:15:44.060(5.5)?(STDERR)位于Object.Module._extensions..js(Module.js:416:10)
W20161203-13:15:44.067(5.5)?(STDERR)位于Module.load(Module.js:343:32)
W20161203-13:15:44.067(5.5)?(STDERR)在Function.Module.\u加载(Module.js:300:12)

我不知道你的代码有什么问题,看起来不错。因此,我对其他方法提出建议:

  • 使用承诺:Meteor方法很好地实现了承诺。因此,如果您请求REST api并希望等待进一步操作的结果,Promise将非常适合:

    import fetch from 'node-fetch';
    
    Meteor.methods({
      getFromApi() {
        retrun fetch('https://link.to/api-endpoint').then((result) => {
          // ...
          return result; // send result to client callback
        }).catch((error) => {
          // handle error
          throw error;
        });
      }
    });
    
  • Meteor还提供了一种处理异步操作的方法,它是:

import fetch from 'node-fetch';

const fetchSync = Meteor.wrapAsync(fetch);

Meteor.methods({
  getFromApi() {
    const result = fetchSync('https://link.to/api-endpoint');
    // ... 
    return result;
  }
});