【问题标题】:NodeJS (Express) + MongoDB + Angular stream a requestNodeJS (Express) + MongoDB + Angular 流式传输请求
【发布时间】:2021-07-17 20:58:51
【问题描述】:

我想在 NodeJS 中流式传输 MongoDB 查询,因为在 Angular 中,我有一个图表,我想更新数据而不进行刷新。 到目前为止,这是我的代码(NodeJS):

exports.gettoday = function (request, response) {
  db.collection("nifi5", function (err, collection) {
    collection
      .aggregate([
        {
          $group: {
            _id: {
              minute: {
                $minute: { $dateFromString: { dateString: "$created_at" } },
              },
              hour: {
                $hour: { $dateFromString: { dateString: "$created_at" } },
              },
              day: {
                $dayOfMonth: { $dateFromString: { dateString: "$created_at" } },
              },
              month: {
                $month: { $dateFromString: { dateString: "$created_at" } },
              },
              year: {
                $year: { $dateFromString: { dateString: "$created_at" } },
              },
            },
            avg: { $avg: "$value_temperature" },
          },
        },
      ])
      .stream()
      .toArray(function (err, items) {
        if (err) {
          response.statusMessage = {
            devMessage: err,
            clientMessage: "Unexpected error, try again latter",
          };
          response.send(response.statusMessage).end();
        }
        let tarray = { labels: [], data: [] };
        items.forEach((element) => {
          element.date = element._id.hour + ":" + element._id.minute;
          element.avg = Math.round(element.avg * 100) / 100;
        });
        items.sort(function (a, b) {
          return a.date < b.date ? -1 : 1;
        });

        items.forEach((element) => {
          tarray.labels.push(element.date);
          tarray.data.push(element.avg);
        });

        return response.json(tarray);
      });
  });
};

角度:

 gettodaydata(): Observable<any> {
    return this.http.get(`${environment.baseURL}gettoday`).subscribe((data) => {

      this.data_line.push(...data.data);
      this.labels_line.push(...data.labels);
      this.isLineChartLoading = false;
    });
  } 

你能帮我流式传输这个控制器并在 Angular 中获取数据,以便在我的数据库有新数据时更新我的​​图表吗? 谢谢大家!

【问题讨论】:

    标签: node.js angular mongodb express stream


    【解决方案1】:

    你应该试试socket.io,它会创建一个持久连接并实时响应事件。

    【讨论】:

    • 我使用了 MongoDb watch() 和套接字 IO。问题解决了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 2011-03-21
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多