在Meteor中,你只能使用包内的模块。你不能直接将模块与流星应用一起使用。此软件包解决了该问题
meteor add meteorhacks:npm
然后启动您的应用并按照说明进行操作。
初始化 npm 支持后,你的应用内将有一个称为文件名的文件名。在该文件中定义包,如下所示。
{
"redis": "0.8.2",
"github": "0.1.8"
}
您必须为 npm 模块定义一个绝对版本号
如果需要从特定提交安装 npm 模块,请使用以下语法:
{
"googleapis": "https://github.com/bradvogel/google-api-nodejs-client/archive/d945dabf416d58177b0c14da64e0d6038f0cc47b.tar.gz"
}
以上内容可以使用 github 版本生成。你要用的是版本,而不是.<commit hash>.tar.gzarchive/<version number>.tar.gz
你可以使用 method 访问服务器端的 npm 模块,并随心所欲地使用它。 大多数 npm 模块都提供带有回调或承诺的异步 API。所以,你不能直接在Meteor上使用它们。正因为如此,这个软件包附带了一组方便的异步实用程序,让你的生活更轻松。
if (Meteor.isClient) {
getGists = function getGists(user, callback) {
Meteor.call('getGists', user, callback);
}
}
if (Meteor.isServer) {
Meteor.methods({
'getGists': function getGists(user) {
var GithubApi = Meteor.npmRequire('github');
var github = new GithubApi({
version: "3.0.0"
});
var gists = Async.runSync(function(done) {
github.gists.getFromUser({user: 'arunoda'}, function(err, data) {
done(null, data);
});
});
return gists.result;
}
});
}
仅在服务器端可用
Meteor.npmRequire(npmModule名称)
此方法加载您在文件中指定的 NPM 模块。
var Github = Meteor.npmRequire('github');
Meteor.require(npmModule名称)
同上。但已弃用。
仅在服务器端可用 Async Utitlies 可以通过
meteorhacks:async
作为单独的软件包提供
Meteor API 是同步执行的。大多数 NodeJS 模块都是异步工作的。 因此,我们需要一种方法来弥补差距。Async Utilities 来拯救你。
Async.runSync()
暂停执行,直到调用 callback,如下所示。done()
var response = Async.runSync(function(done) {
setTimeout(function() {
done(null, 1001);
}, 100);
});
console.log(response.result); // 1001
done()
callback 需要 2 个参数。 和对象。您可以将它们作为 的返回值获取,如上例中的响应所示。errorresultAsync.runSync()
返回值是一个对象,它有 2 个字段。 和。error
result
相同,但已弃用。Async.runSync
包装一个异步函数,并允许它在 Meteor 中运行,没有回调。
//declare a simple async function
function delayedMessage(delay, message, callback) {
setTimeout(function() {
callback(null, message);
}, delay);
}
//wrapping
var wrappedDelayedMessage = Async.wrap(delayedMessge);
//usage
Meteor.methods({
'delayedEcho': function(message) {
var response = wrappedDelayedMessage(500, message);
return response;
}
});
如果回调有结果,它将从包装的函数返回。如果出现错误,则会抛出。
Async.wrap(function)
与 非常相似。
Meteor._wrapAsync
与 非常相似,, 但此 API 可用于包装对象的实例方法。Async.wrap(function)
var github = new GithubApi({
version: "3.0.0"
});
//wrapping github.user.getFrom
var wrappedGetFrom = Async.wrap(github.user, 'getFrom');
与 非常相似,, 但此 API 可用于包装对象的多个实例方法。Async.wrap(object, functionName)
var github = new GithubApi({
version: "3.0.0"
});
//wrapping github.user.getFrom and github.user.getEmails
var wrappedGithubUser = Async.wrap(github.user, ['getFrom', 'getEmails']);
//usage
var profile = wrappedGithubUser.getFrom('arunoda');
var emails = wrappedGithubUser.getEmails();