坚持我第一次尝试基本应用程序。当在控制台中单独运行时,Scraper.js会抓取一个URL并将返回的数组写入文档obj,以便该部分可以正常工作。现在我想要的是一个Express服务器,每当我打开localhost:3000但不确定如何操作时运行脚本。
|node_modules
|package.json
|public
|-index.html (boilerplate HTML. Not importing anything)
|src
|-scraper.js
|index.js
index.js:
var scraperjs = require('scraperjs');
var express = require('express');
var app = express()
app.use(express.static(__dirname + '/public'));
app.listen(3000);
-
scraper.js:
scraperjs.StaticScraper.create('https://examplesite.com/')
.scrape(function($) {
return $(".entry-content p").map(function() {
var content = $(this).html();
return content
}
}).get();
})
.then(function(data) {
... // eventually will write the items returned from the data array to div's
}
});
答案 0 :(得分:0)
您需要使用module.exports = functionName()
导出scraperjs函数作为scraper.js中的最后一行。
index.js中的require
需要考虑scraper.js的路径位置。所以:
var scraperjs = require('./src/scraperjs');
答案 1 :(得分:-1)
这是一个用promises编码的,也是使用daNews
的全局变量
var scraperjs = require('scraperjs');
var express = require('express');
var app = express();
app.use(express.static(__dirname + '/public'));
var url = 'https://news.ycombinator.com/';
var daNews;
function myScraper(){
return new Promise((resolve, reject) => {
scraperjs.StaticScraper.create(url)
.scrape(function($) {
return $(".title a").map(function() {
return $(this).text();
}).get();
})
.then(function(news) {
daNews = news;
resolve('done');
})
});
}
app.get('/', function(req, res){
async function m1(){
var x = await myScraper();
if(x == 'done'){
res.send(daNews);
}else{
console.log('err');
}
}
m1();
})
app.listen(3000);