私のループバックAPIアプリにセーブフックを作成しました。私が行うには、このコードを期待してい何ループバックジオポイントのフックが永続的に変更されない
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();
})
};
は、HTTP(S)を作ることです:私の場所のモデルは、私は次のコードを持っている私のcommon\models\location.js
内のアドレスと緯度経度geopoint
"properties": {
"name": {
"type": "string"
},
"address": {
"type": "string"
},
"latlng": {
"type": "geopoint"
}
},
を持っていますGoogleマップへのリクエスト、住所の緯度と経度を返し、最初のエントリを正確に予測し、そのデータをlatlngプロパティのモデルに保存します。現在、GeoPointオブジェクトとして予想される緯度と経度をコンソールに正しく出力しています。
GeoPoint { lat: 42.3675294, lng: -71.18696609999999 }
この情報でモデルを更新するにはどうすればよいですか?私は条件付きif (ctx.instance)
を削除しようとしましたが、違いはありません。私は別のオブジェクト表記を使ってみました:
ctx.instance['latlng']=latlng
エラーは記録されていません。私はMongoDBに固執していますが、問題はメモリ内のDBを使用する場合と同じです。追加コードはGithub.com/andygauge/api.socialconnectにあります。