[英]Loopback Geopoint Hook not persisting change
我在回送api應用程序中創建了一個保存前的鈎子。 我的位置模型有一個地址和一個latlng地理位置
"properties": {
"name": {
"type": "string"
},
"address": {
"type": "string"
},
"latlng": {
"type": "geopoint"
}
},
在我的common\\models\\location.js
我有以下代碼:
var https = require('https');
var loopback = require('loopback');
module.exports = function(Location) {
Location.observe('before save', function(ctx, next) {
let path = `/maps/api/geocode/json?address=${ctx.instance['address']}&key=AIzaSyCWk3ePB8idTw74LyhR8tLSCmVgbZDKiIQ`
console.log(path);
https.get({
hostname: 'maps.googleapis.com',
path: encodeURI(path)
}, (res) => {
var body = [];
res.on('data', (d) => {
body.push(d)
})
res.on('end', () =>{
body = JSON.parse(Buffer.concat(body).toString());
let latlng = new loopback.GeoPoint({
lat: body['results'][0]['geometry']['location']['lat'],
lng: body['results'][0]['geometry']['location']['lng']
})
console.log(latlng)
if (ctx.instance) {
ctx.instance.latlng = latlng;
} else {
ctx.data.latlng = latlng;
}
})
})
next();
})
};
我期望這段代碼要做的是向Google地圖發出一個http(s)請求,返回地址的緯度和經度,天真地預測出第一個正確的條目,並將該數據保留在latlng屬性中的模型中。 我目前正在正確地將期望的緯度和經度作為GeoPoint對象輸出到控制台:
GeoPoint { lat: 42.3675294, lng: -71.18696609999999 }
如何使用此信息更新模型? 我試圖刪除無條件的條件if (ctx.instance)
。 我嘗試使用其他對象表示法:
ctx.instance['latlng']=latlng
沒有錯誤被記錄。 我堅持使用MongoDB,但使用內存數據庫的問題相同。 附加代碼位於Github.com/andygauge/api.socialconnect
這里的問題是next()
的位置。 由於nodejs的異步特性,因此在http請求完成和處理之前調用next()
。 在工作流程進行驗證之后,將對模型進行更改。
解決方案如下所示:
module.exports = function(Location) {
Location.observe('before save', function(ctx, next) {
let path = `/maps/api/geocode/json?address=${ctx.instance['address']}&key=AIzaSyCWk3ePB8idTw74LyhR8tLSCmVgbZDKiIQ`
console.log(path);
https.get({
hostname: 'maps.googleapis.com',
path: encodeURI(path)
}, (res) => {
var body = [];
res.on('data', (d) => {
body.push(d)
})
res.on('end', () =>{
body = JSON.parse(Buffer.concat(body).toString());
let latlng = new loopback.GeoPoint({
lat: body['results'][0]['geometry']['location']['lat'],
lng: body['results'][0]['geometry']['location']['lng']
})
console.log(latlng)
if (ctx.instance) {
ctx.instance.latlng = latlng;
} else {
ctx.data.latlng = latlng;
}
next();
})
})
})
};
感謝您的意見。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.