javascript - Meteor 的 package.js 中的 HTTP 请求

标签 javascript node.js meteor

在 autopublish.meteor.com,我们正在尝试检索有关软件包的一些外部数据,即其最新版本标签 from GitHubthe NPM registry :

var version;
try {
  var packageJson = JSON.parse(Npm.require('fs').readFileSync('package.json'));
  version = packageJson.version;
} catch (e) {
  // package.json won't be found when running the example with the local copy
  // of the package because the current directory isn't the package dir
  // ... so fall back to other methods of getting the version
  version = HTTP.get('...').data.version;
}

Package.describe({
   name: 'foo',
   summary: 'bar',
   version: version,
});

问题是 HTTP 包在 package.js 中不可用。

我尝试过使用the request module ,通过 Npm.require('request'),但该模块是异步的并且...

request.get('http://registry.npmjs.org/summernote/latest', function (err, res, body) {
  ...
  Package.describe({
    ...
  });
});

...失败,因为 Package.describe 需要在 Fiber 中运行:

Error: Meteor code must always run within a Fiber. Try wrapping callbacks that you pass to non-Meteor libraries with Meteor.bindEnvironment.

问题是 Meteor 单例在 package.js 中也不可用。

有办法做到这一点吗?

<小时/>

我尝试过的其他事情:

  • 使用 NPM api,例如npm.view('summernote'); - 不起作用,因为你不能 Npm.require('npm'):

    In package.js, Npm.require can only find built-in modules.

  • 使用 execFileSync 调用 npm 二进制文件,但这不起作用,因为 execFileSync 仅在 Node v0.12.0, which Meteor doesn't use yet 中可用。 .

最佳答案

在光纤中运行意味着使用 node-fibers因此您可以像使用 Npm.require('optics/future') 请求一样添加它。

因此,此代码获得该模块的“0.6.1”版本:

var request = Npm.require('request');
var Future = Npm.require('fibers/future');

var fut = new Future();

request.get('http://registry.npmjs.org/summernote/latest', function (err, res, body) {
  if (! err){
    fut.return (body);
  }
});
var body = JSON.parse(fut.wait());

Package.describe({
   name: 'foo',
   summary: 'bar',
   version: body.version
});

关于javascript - Meteor 的 package.js 中的 HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28848733/

相关文章:

javascript - NestJS 如何使用 async/await 配置中间件?

css - 在 Meteorjs 中更改默认的 materializecss 颜色

css - 如何在 METEOR 中指定特定的 css 文件

java - mongodb JavaScript 查询

javascript - 两个事件触发相同的函数

javascript - 没有 Vue 可以使用 Vuex 吗? (Vuex 服务器端?)

meteor - 如何从 meteor 外壳以特定用户身份登录

javascript - 将 Flickr API 响应打印到控制台 AngularJS

javascript - "parent"是否应该不用作 javascript 变量名(保留字)

javascript - 在 Web Worker 中发起 HTTP 请求