我有一個使用Firebase雲功能的推送通知系統,最近我注意到推送通知不再進入(他們一直在爲過去工作幾個月)。當我進入日誌我看到TypeError:無法讀取未定義的屬性'toString'在Geolib.isDecimal
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);
};
};
其中一個參數傳遞給getDistance不是你所期望的。讓你的userValue函數console.log lat,long,postLat,postLong,看看你有什麼。我的猜測是其中的一件事是未定義的。 – James
@詹姆斯剛剛用console.log運行它,每個值都變好了=/ – notJenny
有趣。一個[快速測試](https://jsfiddle.net/6n4jyctz/)使用漂亮乏味的經緯度值對我來說確實很好。我不知道這個bug是否與瀏覽器版本有關。 – James