【发布时间】:2017-09-05 12:50:45
【问题描述】:
我第一次尝试基本节点应用程序。
如果我用 console.log(eventsArray) 测试运行这个文件 (> node index.js),数组成功地从命令窗口中的刮板模块打印出数据,所以我的刮板模块正在工作。
如果我设置 eventsArray = ['this','is,'a','test','array'];在 index.js 中作为测试,然后在使用 Express 运行应用程序后,这些字符串会像我想要的那样显示在主页上,因此 Express + Jade 模板正在工作(无需在此处包含我的 ejs 模板,因为它正在工作)。
问题:如果我尝试如下所示运行应用程序 (> node index.js),eventsArray 在传递给 res.render 函数时似乎是“未定义”,因此 localhost:3000 上没有显示任何内容(主页)
index.js:
var myScraperModule = require('./src/scraper'); // import my scraper function
var express = require('express');
var app = express();
eventsArray = myScraperModule.getEvents(); // returns an array
app.set('port', process.env.PORT || 3000);
app.get('/', function(req, res) {
res.render('index.ejs', {data : eventsArray }); // send array to homepage
});
app.listen(app.get('port'), function(){
console.log("express started")
});
scraper.js:
// basic web scraper using scraperjs module
var scraperjs = require('scraperjs');
function getEvents(){
scraperjs.StaticScraper.create('https://examplewebsite.com/')
.scrape(function($) {
return $("p").map(function() {
return $(this).html();
}
}).get();
})
.then(function(data) {
//... clean up the data and return it as eventsClean
return eventsClean; // return an array of strings
}
});
}
module.exports = getEvents;
【问题讨论】:
-
嘿,eventsClean 定义在哪里,似乎 getEvents 没有返回任何东西?您可以将“回调”添加到 getEvents 函数或使用“承诺”。 {return scraperjs.StaticScraper.... new Promise(function(resolve) {resolve(eventsClean)})} 或 getEvents(callback) {... callback(eventsClean) ...}
标签: javascript node.js express ejs scraper