постоянно хранить 'get' и хранить данные в mongodb, используя nodejs - PullRequest
0 голосов
/ 29 января 2019

Мне нужно постоянно делать этот запрос http.get от API, который отправляет обратно данные о местоположении

Поэтому я попытался написать базовый запрос get, чтобы проверить, поступают ли данные, и это проблемаесли мне нужно, чтобы это происходило в непрерывном цикле каждую секунду, когда устройство GPS отправляет данные.

http.get(_url2, res =>{
    let body='';

        res.on("data", data =>{
            body+=data;
        })
     res.on("end",()=>{
        body = JSON.parse(body);
        gpsData.push(body.data);
        console.log('gpsData Array : ',gpsData)

    })
}) 

Я выхожу из системы на консоли, $ node server3.js gpsData Array : [ [ { imei: '86851212020143921', device_info: 0, device_info_new: 0, seconds: 0, gps_time: 1548760740, sys_time: 1548760744, heart_time: 1548760744, server_time: 1548760748, lng: 33.756899, lat: -13.973598, course: 160, speed: 7, status: '010000fb000000000000000000000000', location: 'GPS', acc: '1', acc_seconds: 335, voice_status: -1, voice_gid: 0 } ] ]

, показывая, что это работает, как я могусделать этот код в асинхронном WebSocket, который непрерывно получает эти данные, а затем сохраняет его в MongoDB с заданными полями?

1 Ответ

0 голосов
/ 01 февраля 2019

хорошо, так что я нашел решение, лучший (на мой взгляд) способ - использовать функцию setInterval(), поместить HTTP-запрос внутрь функции, чтобы указать, сколько раз за единицу времени вы хотите вставить в БД, затемоттуда mongodb принимает объекты по умолчанию, поэтому, если вы вернете объект в mongodb, он сохранит его для вас, вот код

MongoClient.connect('mongodb://127.0.0.1:27017/gpsapp2', function(err,client){
if(err) return console.log(err)
db = client.db('gpsapp2')
let counter =0
 setInterval(()=>{
        http.get(_url2, res =>{
        let body='';

        res.on("data", data =>{
                body+=data;
            })
        res.on("end",()=>{
            body = JSON.parse(body);

            //console.log(counter++,'Records inserteerd')
            db.collection('gpsdata').save(body.data[0]);

        })
    })


},1000);

http.get из URL, проанализируйте тело и сохраните в коллекции.не забывайте, что вызов API является асинхронным, поэтому любой вызов данных за пределами res.on('end') будет иметь пустые или неопределенные результаты.

надеюсь, это кому-нибудь поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...