我在基本节点应用程序中的第一次尝试。通过Express传递数组时获取'undefined'res.render函数
如果我测试运行此文件(> node index.js)与其中的console.log(eventsArray),阵列成功从命令窗口中刮板模块输出数据,所以我的刮板模块正在工作。
如果我设置eventsArray = ['this','is,'a','test','array'];在index.js中作为一个测试,然后这些字符串会显示在主页上,就像在Express中运行应用程序后我想要的那样,所以Express + Jade模板正在工作(因为它正在工作,所以无需在此处包含我的ejs模板)。
问题:如果我尝试按如下所示运行应用程序(> node index.js),eventsArray在传递到res.render函数时显示为'undefined',所以没有显示在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函数或使用“Promise”。 {return scraperjs.StaticScraper .... new Promise(function(resolve){resolve(eventsClean)})}或getEvents(callback){... callback(eventsClean)...} –