尝试使用Express在localhost:3000上运行脚本

卡住了我的第一次尝试在一个基本的应用程序。 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 } }); 

您需要使用module.exports = functionName()作为module.exports = functionName()中的最后一行导出scraperjs函数。

您在index.js中的要求需要考虑scraper.js的path位置。 所以:

var scraperjs = require('./src/scraperjs');

这是我用promise来编码的一个,也是使用daNews的全局variables

 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);