我使用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";
}));;;
任何帮助将不胜感激!
干杯!
答案 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 ,它将处理身份验证和高级流管理(文件上传分块为例)等,但需要更多工作才能开始。
答案 1 :(得分:2)
据我了解您的要求,该流程应该像以下一样工作
为了做到这一点,我相信你在服务器上定义了一个特定的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
});
}