socket.io를 사용하여 위치 정보 (lat, lng)를 브로드 캐스팅하고 사용자가 앱에 연결할 때마다지도에 새 아이콘 아이콘을 설정합니다. 일본에있는 사용자가 연결하면 socket.io가 나에게 자신의 위치를 보내고 내 위치도 받게됩니다. 문제는 사용자가 먼 거리에 있지만 사전 정의 된 반경 (예 : 20km) 내에있는 사용자의 위치를 받고 (내 위치를 보냈 으면) 문제입니다.mongo DB에 사용자 데이터를 자동으로 보내는 방법
mongo DB 내의 공간 검색은 동일한 영역에있는 사용자를 식별하여 groupId에 할당하는 것이 적절할 것으로 보입니다. 같은 groupId의 사용자는 그들이 듣게 될 공통 socket.io 채널에 할당됩니다.
내 꿈을 이루기 위해 실제로 몽구스로 사용자 정보를 몽고 DB에 저장하려고합니다. 문제는 데이터가 클라이언트에있는 동안 서버에서 몽구스가 실행된다는 것입니다.
데이터베이스를 구조화하기 위해 schema.js를 정의했지만 클라이언트 데이터를 연결하는 경로를 설정하는 방법에 대해 약간 분실했습니다. mongoose와 클라이언트 모두 적절한 JSON 객체를 반환해야하며 데이터는 model.save()
으로 저장 될 수 있음을 이해합니다. 이 순진한 질문에 대해 미안하지만 그 점에 도움을 많이 주시면 감사하겠습니다. 고맙습니다.
편집 :
마침내 socket.io가 send2DB
기능을 서버에 사용자 데이터를 전달하기 위해 사용하지만이 오류에 직면하고 있습니다 :
Object { _id: 50fc08aebb97d3201d000001,
coords; [],
date: Sun Jan 20 2013 16:18:34 GMT+0100 (Paris, Madrid) } has no methode 'push'`
과 probelm 것 같다을 배열 coords
하지만 나는 왜 그것도 날짜를 반환 이해가 안돼! 여기에 코드입니다 :
application.js :
// generate unique user id
var userId = Math.random().toString(16).substring(2,15);
// code here
onLocationfound = function(e){
userMarker.setLatLng(e.latlng);
map.setView(userMarker.getLatLng(),map.getZoom());
latitude = (e.latlng[0]||(Math.round(e.latlng.lat*1000)/1000));
longitude = (e.latlng[1]||(Math.round(e.latlng.lng*1000)/1000));
// send data to database (executed once)
sentData = {id: userId, coords: [{lat: latitude, lng: longitude}]}
socket.emit('send2DB', sentData);
server.js :
mongoose.connect('mongodb://localhost/test');
var mongoose = require('mongoose')
, Schema = mongoose.Schema
, ObjectId = Schema.ObjectId;
// create schema
var userInformation = new Schema({
username: { type: String, required: true, trim: true },
email: { type: String, required: true, trim: true },
role: { type: String, required: true, trim: true },
date: {type: Date, default: Date.now},
userId: String,
longitude: Number,
latitude: Number,
coords: [Number, Number]
});
// export retrieve my model
var MyModel = mongoose.model('ModelName', userInformation);
var instance = new MyModel();
// code here
io.sockets.on('connection', function (socket) {
// code here
// Store user data to DB then query spatial info //
socket.on('send2DB', function (data) {
console.log('Position is', data);
instance.push(
{userId: 'data.id'},
{latitude: 'data.lat'}
);
instance.save(function (err) {
if (!err) console.log('Success!')
else console.log('Error');
});
});
세션 또는 다른 토큰을 사용하여 특정 사용자를 추적하려면 socket.io 연결에 몇 가지 코드를 작성해야합니다. 그런 다음 새 데이터가 들어 오면 위치를 업데이트하기 위해 서버의 지리 정보가 포함 된 특정 이벤트에 대한 처리기를 작성합니다. 클라이언트 애플리케이션이 호출 할 API 레이어를 작성하는 중입니다. 클라이언트는 데이터베이스에 직접 호출하지 않아야합니다. – WiredPrairie
새로운 코드와 결과로 내 게시물을 업데이트했습니다. 요약하려면 사용자의 위치를 찾은 후에 데이터를 저장하려고합니다. 그런 다음 주변 공간에있는 사용자를 식별하기 위해 일부 공간 정보를 쿼리합니다. 내가 가진 오류를 좀 봐 주시겠습니까? 감사합니다. – floflo