我在基本節點應用程序中的第一次嘗試。通過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)...} –