TypeError: Невозможно прочитать свойство 'toString' из неопределенного в Geolib.isDecimal

1

У меня есть система push-уведомлений с использованием облачных функций Firebase, и недавно я заметил, что push-уведомления больше не появлялись (они работали последние несколько месяцев). Когда я иду в журналы, я вижу

TypeError: Cannot read property 'toString' of undefined
at Geolib.isDecimal   (/user_code/node_modules/geolib/dist/geolib.js:1326:26)
at Geolib.useDecimal (/user_code/node_modules/geolib/dist/geolib.js:1241:22)
at Geolib.coords (/user_code/node_modules/geolib/dist/geolib.js:179:85)
at Geolib.getDistance (/user_code/node_modules/geolib/dist/geolib.js:247:26)
at userValue (/user_code/index.js:104:34)
at /user_code/index.js:94:4
at /user_code/node_modules/firebase-admin/lib/database/database.js:114:356
at Xb.h.ha (/user_code/node_modules/firebase-admin/lib/database/database.js:50:275)
at Xb.h.ha (/user_code/node_modules/firebase-admin/lib/database/database.js:50:268)
at Xb.h.ha (/user_code/node_modules/firebase-admin/lib/database/database.js:50:310)

Я не изменил ни одного кода и повторно загрузил Geolib, но все равно не сдвинусь с места, любая помощь будет принята с большой благодарностью.

МОЙ КОД:

 exports.postMade = functions.database.ref('/PostData/post/{pushId}').onWrite(event => {

console.log('Someone made a post');

var valueObject = event.data.val();

console.log('the data in valueObject'+ valueObject)

return admin.database().ref('Users').once('value').then(snapshot => {

    snapshot.forEach(function(child){
        var values = child.val();
        console.log('the values inside of value'+ values)
         userValue(values.userLat,values.userLong,values.radiusDistance,values.token,valueObject.lat,valueObject.long,valueObject.userUid,valueObject.text)
    })
});
});


function userValue(lat,long,radiusDistance,token,postLat,postLong,postUser,postText){

var unconvertedDistance = geolib.getDistance({latitude: lat, longitude: long}, {latitude: postLat, longitude: postLong});

var convertedDistance = geolib.convertUnit('mi',unconvertedDistance, 0)

console.log('the values of both unconvertedDistance and convertedDistance'+ unconvertedDistance,+ convertedDistance)

if (convertedDistance <= radiusDistance){
const payload = {
          notification: {
            title: "Someone posted near you!",
            body: postText,
            badge: "1",
            sound: "default"
        },
    };
const options = {
     priority: "high",
        timeToLive: 60 * 60 * 24
    };

return admin.messaging().sendToDevice(token, payload, options);
};
};
  • 1
    Один из параметров, передаваемых в getDistance, не соответствует вашим ожиданиям. Сделайте свою функцию userValue console.log lat, long, postLat, postLong и посмотрите, что у вас есть. Я думаю, что одна из этих вещей не определена.
  • 0
    @James просто запустил его с console.log, и каждое значение оказалось хорошим = /
Показать ещё 1 комментарий
Теги:
firebase-cloud-messaging
push-notification

3 ответа

1
Лучший ответ

это известная проблема в этом пакете geoLib, который находится на рассмотрении с июля 2016 года

  • 1
    просто моя удача, спасибо за помощь
0
class Distance {
  toRadians(degrees) {
    return degrees * (Math.PI / 180);
  }

  calc(from, to) {
   const lat1 = parseFloat(from.lat);
   const lon1 = parseFloat(from.lng);
   const lat2 = parseFloat(to.lat);
   const lon2 = parseFloat(to.lng);
   const R = 6371; // Radius of the earth in km
   const dLat = this.deg2rad(lat2 - lat1); // deg2rad below
   const dLon = this.deg2rad(lon2 - lon1);
   const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
   Math.cos(this.deg2rad(lat1)) * Math.cos(this.deg2rad(lat2)) *
   Math.sin(dLon / 2) * Math.sin(dLon / 2);
   const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
   const d = R * c; // Distance in km
   return d;
 }

 deg2rad(deg) {
   return deg * (Math.PI / 180);
 }
 }

export default new Distance();
0

Убедитесь, что широта, долгота и радиус - это String. У меня была та же проблема, я обнаружил, что она отлично работает со строковыми параметрами

Ещё вопросы

Сообщество Overcoder
Наверх
Меню