我如何在流星应用程序上使用 X 射线?
How do i use x-ray on a meteor app?
我正在尝试在 Meteor 上使用 X 射线,但到目前为止还没有成功。
这是我正在测试的示例(它在基本节点应用程序上运行良好)
import Xray from 'x-ray';
var xray = new Xray();
xray('http://reddit.com/r/meteor/', '.title',
[{
title: '',
href: '@href'
}]
)
.write('./result.json');
我希望你在 5 个月前就明白了,
我想出了这个问题,然后想通了。
不要使用 atmosphere 包,因为它不再被维护。
$meteor npm install --save x-ray
(https://github.com/lapwinglabs/x-ray)
然后只需要在服务器端创建一个Meteor.method,然后在客户端调用它。
(https://docs.meteor.com/api/methods.html)
// Server Side
import Xray from 'x-ray'
Meteor.methods({
scrap:function(){
var x = Xray();
console.log('Is scrapping');
x('http://google.com', 'title')(function(err, title) {
console.log(title) // Google
})
}
});
然后
// Client Side
Meteor.apply('scrap', function(error, result) {
console.log(error, result);
console.log('Scrap is bussy');
})
干杯
前面 post 中的代码确实在服务器端调用了 x 射线函数,但没有 return 将结果发送给客户端。
使用 async/wait 和 promises (ES7) 你可以 return 从服务器到客户端的结果:
method.js(服务器):
import { Meteor } from 'meteor/meteor';
import Xray from 'x-ray';
Meteor.methods({
async 'scrape.test'() {
let x = Xray(),
scraper;
function scrap() {
return new Promise((r, e) => {
x('http://google.com', 'title')(function(err, title) {
if (err) e(err);
if (title) r(title);
});
});
}
try {
return await scrap();
} catch (error) {
throw new Meteor.Error('500', error);
}
}
});
client.js:
Meteor.call('scrape.test', (error, result) => {
if (error) console.log('error', error);
console.log('result', result);
});
干杯
我正在尝试在 Meteor 上使用 X 射线,但到目前为止还没有成功。
这是我正在测试的示例(它在基本节点应用程序上运行良好)
import Xray from 'x-ray';
var xray = new Xray();
xray('http://reddit.com/r/meteor/', '.title',
[{
title: '',
href: '@href'
}]
)
.write('./result.json');
我希望你在 5 个月前就明白了, 我想出了这个问题,然后想通了。
不要使用 atmosphere 包,因为它不再被维护。
$meteor npm install --save x-ray
(https://github.com/lapwinglabs/x-ray)
然后只需要在服务器端创建一个Meteor.method,然后在客户端调用它。
(https://docs.meteor.com/api/methods.html)
// Server Side
import Xray from 'x-ray'
Meteor.methods({
scrap:function(){
var x = Xray();
console.log('Is scrapping');
x('http://google.com', 'title')(function(err, title) {
console.log(title) // Google
})
}
});
然后
// Client Side
Meteor.apply('scrap', function(error, result) {
console.log(error, result);
console.log('Scrap is bussy');
})
干杯
前面 post 中的代码确实在服务器端调用了 x 射线函数,但没有 return 将结果发送给客户端。
使用 async/wait 和 promises (ES7) 你可以 return 从服务器到客户端的结果:
method.js(服务器):
import { Meteor } from 'meteor/meteor';
import Xray from 'x-ray';
Meteor.methods({
async 'scrape.test'() {
let x = Xray(),
scraper;
function scrap() {
return new Promise((r, e) => {
x('http://google.com', 'title')(function(err, title) {
if (err) e(err);
if (title) r(title);
});
});
}
try {
return await scrap();
} catch (error) {
throw new Meteor.Error('500', error);
}
}
});
client.js:
Meteor.call('scrape.test', (error, result) => {
if (error) console.log('error', error);
console.log('result', result);
});
干杯