使用HTTP.get获取通过meteor中的HTTP.post发布的数据

时间:2017-08-11 13:07:53

标签: web-services meteor service http-get httplistener

我使用meteorjs构建了一个应用程序。我需要来自第三方的一些数据。他们会通过HTTP.POST方法向我发送数据。

我需要在我的应用上监听以查找http.post请求。如果我遇到这样的请求,我需要发送一个确认,说收到了请求,然后我需要提取发送的数据。

我使用下面的代码,但输出不符合预期。

使用选择器包,

var postData = {
"channelName" : "Number Theory1",
"startDate" : "2017-07-22T06:29:35.681Z",
"endDate" : "2017-08-22T06:29:35.681Z"
}
HTTP.call('POST', 'http://localhost:3000', {
   data: postData 
 }, (error, result) => {
 if (error) {
   console.log('we are getting this error:' + error);
 } else {
    console.log('POstres : ' + result);
 }
 }); 
function extractProcessData(data){
   console.log('function called! : ' + data);
}
function confirmDataReceived(data) {
  HTTP.get('http://localhost:3000', function(err, res){
  // confirmation error
  if(err){
    console.log('error ' + err);
  }
  // confirmation success and process data
  else{
    console.log('data : ' + data + res)
    extractProcessData(data) //call function to process data
  }
});
}
var postRoutes = Picker.filter(Meteor.bindEnvironment(function(req, res) {
 if (req.method == "POST"){
   console.log('req : ' + req.method + " " + req.body)
   confirmDataReceived(req.body);
 }
 return true;
 // return req.method == "POST";
}));;;

任何帮助将不胜感激!

干杯!

2 个答案:

答案 0 :(得分:2)

您需要使用中间件库。我过去使用过2个。

Picker 是最简单的实现和使用像

这样简单的东西
Picker.route('/post/:_id', function(params, req, res, next) {
  var post = Posts.findOne(params._id);
  res.end(post.content);
});

https://github.com/meteorhacks/picker

然后有更强大的解决方案, Restivus ,它将处理身份验证和高级流管理(文件上传分块为例)等,但需要更多工作才能开始。

https://github.com/kahmali/meteor-restivus

答案 1 :(得分:2)

据我了解您的要求,该流程应该像以下一样工作

  1. 您收到第三方的帖子请求
  2. 您需要通过向第三方提出的请求进行确认
  3. 为了做到这一点,我相信你在服务器上定义了一个特定的URL作为端点,并正确过滤那些你正在使用Picker路由器的帖子请求(我对这个不太熟悉)

    对于第一部分(帖子请求),我建议如下:

    var postRoutes = Picker.filter(function(req, res) {
       // here you could be a bit more specific in which
       // post request you are looking for, e.g. check the req.url
       if (req.method == "POST") {
          confirmDataReceived(req.body);
       }
       return true;
    });
    

    然后我们可以转到第二部分并将确认发送给第三方,并使用提供的数据来调用您定义的函数来处理它。

    function confirmDataReceived(data) {
      // send the confirmation
      HTTP.get('http://122.160.157.105:3000', function(err, res){
        // confirmation error
        if(err){
            console.log('error ' + err);
        }
        // confirmation success and process data
        else
            fname(data) //call function
        });
    }