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

时间:2017-09-01 22:46:40

标签: javascript node.js express npm

坚持我第一次尝试基本应用程序。当在控制台中单独运行时,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
        } 
 });

2 个答案:

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