기본 노드 응용 프로그램에서 처음 시도했습니다.Express res.render 함수를 통해 배열을 전달할 때 '정의되지 않음'얻기
대신 console.log (eventsArray)를 사용하여이 파일 (> node index.js)을 실행하여 테스트하면 어레이가 명령 창에서 스크래퍼 모듈의 데이터를 성공적으로 인쇄하므로 내 스크래퍼 모듈이 작동합니다.
eventsArray = [ 'this', 'is', 'test', 'array'];를 설정하면; index.js 테스트에서,이 문자열은 내가 익스프레스로 앱을 실행 한 후 원하는대로 익스프레스 + 비취 템플릿이 작동하고 있기 때문에 홈페이지에 표시됩니다 (작동 중이기 때문에 여기에 내 ejs 템플릿을 포함 할 필요가 없습니다).
문제 : 아래와 같이 노드 인덱스 (.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 함수에 '콜백'을 추가하거나 'Promise'를 사용할 수 있습니다. {return scraperjs.StaticScraper .... 새로운 약속 (function (resolve) {resolve (eventsClean)})} 또는 getEvents (콜백) {... 콜백 (eventsClean) ...} –