使用 nodejs 连续存储 'get' 并在 mongodb 中存储数据

continuously store 'get' and store data in mongodb using nodejs

我需要从发回位置数据的 API 不断发出此 http.get 请求

所以我尝试写一个基本的 get reuest 来检查数据是否通过,问题是我需要它在一个连续的循环中,每秒 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 中?

ok 所以我找到了一个解决方案,最好的(在我看来)方法是使用 setInterval() 函数,将 HTTP 请求放在函数中以设置每单位时间要插入多少次数据库,然后从那里 mongodb 默认接受对象,所以如果你 return 对象 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') 之外的数据的任何调用都将得到空的或未定义的结果。

希望这对某人有所帮助。