Проблемы с получением экспресс-отклика от MongoDB (Node.js) - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь передать данные из моей локальной коллекции MongoDB во внешний интерфейс моего приложения для тестирования.

У меня проблемы с попыткой заставить мой интерфейс разговаривать с моим бэкэндом.

Я пытался изменить параметры в моем маршруте "getData" ... и я думаю, что я немного обернулся.

const mongoose = require("mongoose");
const express = require("express");
var cors = require("cors");
const bodyParser = require("body-parser");
const logger = require("morgan");

const API_PORT = 27017;
const app = express();
app.use(cors());
const router = express.Router();


const dbRoute = "mongodb://127.0.0.1:27017/nycsandy";

mongoose.connect(
  dbRoute,
  { useNewUrlParser: true }
);

let db = mongoose.connection;
let dbdata;

db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function () {
    db.db.collection("socialmedia", function(err, collection){
        collection.find({}).toArray(function(err, data){
            console.log("data length from coll ", data.length); // it will print the collection data just fine
            dbdata = data
        })
    });

});

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(logger("dev"));

// I need to get this to just return data
router.get("/getData", (req, res) => {
     return dbdata
    // I don't know what to put here to get my response?
});
.....

Передний конец App.js выглядит так:

// /client/App.js
import React, { Component } from "react";
import axios from "axios";

class App extends Component {
  // initialize our state
  state = {
    data: [],
    id: 0,
    message: null,
    intervalIsSet: false,
    idToDelete: null,
    idToUpdate: null,
    objectToUpdate: null
  };

  componentDidMount() {
    this.getDataFromDb();
    if (!this.state.intervalIsSet) {
      let interval = setInterval(this.getDataFromDb, 10000);
      this.setState({ intervalIsSet: interval });
    }
  }

  componentWillUnmount() {
    if (this.state.intervalIsSet) {
      clearInterval(this.state.intervalIsSet);
      this.setState({ intervalIsSet: null });
    }
  }

  getDataFromDb = () => {
    fetch("http://localhost:27017/api/getData")
        .then(data => data.text())
        .then(text => console.log(text))
// just testing it for now.
  };
......

Это приводит к пустой ошибке ответа. ERR_EMPTY_RESPONSE

Я немного растерялся от того, как я получаю свои данные, которые правильно записываются на консоль, в маршрут getData.

Спасибо.

1 Ответ

1 голос
/ 12 апреля 2019

В вашем router.get попробуйте это:

res.status(200).send("whatYouWantToSend")
...