Read the statement by Michael Teeuw here.
Need help for rewrite node_helper.js from 'request' to 'got'
-
As we all know, the Nodejs module “request” is deprecated.
I like to rewrite my node_helper.js module so request is not used anymore. Instead the Nodejs module “got” will be used.Module: https://github.com/htilburgs/MMM-MyPrayerTimes
Can someone help me on my way?
I’m not a developer and just do it for fun. -
@htilburgs just use the built in fetch
no libraries needed
fetch is in node 18 or above and electron 26 or above.
very similar to request.
look at the calendar fetcher js, which used request before.
-
Oké, made a start.
Changed my node_helper.js to:/* //------------------------------------------- MMM-MyPrayerTimes Copyright (C) 2019 - H. Tilburgs MIT License //------------------------------------------- */ const NodeHelper = require('node_helper'); module.exports = NodeHelper.create({ start: function() { console.log("Starting node_helper for: " + this.name); }, getMPT: function(url) { // Make a GET request using the Fetch API fetch(url) .then(response => { if (!response.ok) { throw new Error('Network response was not ok'); } return response.json(); }) .then(result => { // Process the retrieved user data console.log(result); this.sendSocketNotification('MPT_RESULT', result); }) .catch(error => { console.error('Error:', error); }); }, socketNotificationReceived: function(notification, payload) { if (notification === 'GET_MPT') { this.getMPT(payload); } } });
In the console I see the data:
[2024-06-24 21:39:44.867] [LOG] { code: 200, status: 'OK', data: { timings: { Fajr: '03:08', Sunrise: '05:21', Dhuhr: '13:40', Asr: '18:03', Sunset: '21:59', Maghrib: '21:59', Isha: '00:04', Imsak: '02:58', Midnight: '01:40', Firstthird: '00:26', Lastthird: '02:54' }, date: { readable: '24 Jun 2024', timestamp: '1719257984', hijri: [Object], gregorian: [Object] }, meta: { latitude: 51.48167, longitude: 5.66111, timezone: 'Europe/Amsterdam', method: [Object], latitudeAdjustmentMethod: 'ANGLE_BASED', midnightMode: 'STANDARD', school: 'STANDARD', offset: [Object] } } }
Only 1 problem, times are not displayed in de module
I know it has something to do with
var result = JSON.parse(body).data.timings; //
but I’m having troubles with this.
When I replace body with result, I get an error.
I’ve been looking for a solution for a few days now, but no result.Some help is appreciated ;-)
-
I kept on searching and think I’ve found it.
I didn’t use JSON.parse(), but simply put it in the resultthis.sendSocketNotification('MPT_RESULT', result.data.timings);
It works, but I hope this is the right way.
-
@htilpburgs I was going to say the result of json() is passed already
-
@sdetweil
As far as I can see this works the correct way.
Do you agree? -
@htilburgs depends on what you mean by correct.
it returns the parsed text as an object
not text. -
@sdetweil
That I don’t understand.
Is this a problem? What would be better? -
@htilburgs the response.json() function returns a js object already parsed.
thst is what yiy were going to fo w JSON.parse(). but don’t need to.
I don’t know if the CONTENT of the object is correct, but it should be for the same request
-
@sdetweil
In the previous version with ‘request’ I used JSON.parse() and got the same results.
The module works, but I didn’t know for sure if I used the correct approach.