Я пытаюсь поэкспериментировать с парусами. js (с node.js). У меня есть контроллер следующим образом. Этот контроллер анализирует URL-адрес, переданный в параметре url как ical_url
, и я пытаюсь его проанализировать и создать нормализованную json objet c постоянную потребность. У меня есть parse
функция, которая доступна только за пределами этого контроллера. При этом используется синтаксический пакет npm (https://www.npmjs.com/package/node-ical) для анализа содержимого. В методе ical.fromURL
у меня есть функция обратного вызова, с помощью которой я инициализировал переменную normalized_data
и сохранил в ней данные. Я собираюсь использовать эти данные и вызвать метод decorate
для некоторой обработки и получить обратно json. Пожалуйста, посмотрите на строку, начинающуюся с //>>>>>>
, и, согласно моему желанию, у меня нет доступа к normalized_data
. В соответствии с https://github.com/jens-maus/node-ical/blob/HEAD/index.js#L87 ical.fromURL
возвращает обещание, но мне трудно понять как использовать данные, которые являются частью этого обещания. Может ли кто-нибудь помочь мне внести изменения, необходимые в этом файле (особенно в методе parse
), чтобы оправдать мои ожидания? Заранее спасибо.
/**
* IcalsController
*/
const ical = require('node-ical');
const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
const days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thur', 'Fri', 'Sat'];
function normalize(ev_obj) {
return {
"uid": ev_obj.uid,
"start": ev_obj.start.toDateString(),
"end": ev_obj.end.toDateString(),
"start_ts": ev_obj.start,
"end_ts": ev_obj.end,
"user": ev_obj.organizer.val.split("mailto:")[1].split("@")[0], //TODO - use regex for extraction
"summary": ev_obj.summary,
"categories": ev_obj.categories,
"all_day": (ev_obj["event-allday"] == "true")
}
}
function decorate(data) {
//do something here and return a json object
//return json_object;
}
module.exports = {
parse: function (req, res) {
if (req.param("ical_url") == undefined) {
return res.status(400).send("ical_url is missing");
}
ical.fromURL( //refer - https://github.com/jens-maus/node-ical/blob/HEAD/index.js#L87
req.param("ical_url"),
{},
function (err, data) {
let normalized_data = [];
for (let k in data) {
if (data.hasOwnProperty(k)) {
if (data[k].type == 'VEVENT') {
normalized_data.push(normalize(data[k]));
}
}
}
}
);
//>>>>>> Here I want to call decorate function and pass normalized_data as parameter
let result = decorate(normalized_data)
return res.send(result);
},
};