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