Почтальон GET Request зависает и никогда не возвращает никаких результатов - PullRequest
0 голосов
/ 28 февраля 2020

Я пытаюсь создать REST API с помощью Node.js, Express и MongoDB. Кажется, все работает до сих пор. Сервер запускается и подключается к БД. БД (называемая API) имеет две коллекции (Статьи и Источники). Я пытаюсь отправить запрос GET в коллекцию статей. Однако, когда я отправляю запрос, Почтальон как бы зависает, а затем выдает это сообщение об ошибке и приводит к сбою сервера:

Could not get any response
There was an error connecting to localhost:3000/articles.
Why this might have happened:
The server couldn't send a response:
Ensure that the backend is working properly
Self-signed SSL certificates are being blocked:
Fix this by turning off 'SSL certificate verification' in Settings > General
Proxy configured incorrectly
Ensure that proxy is configured correctly in Settings > Proxy
Request timeout:
Change request timeout in Settings > General

Сервер выдает следующие ошибки при сбое:

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
 1: 0x10007e891 node::Abort() [/usr/local/Cellar/node/13.8.0/bin/node]
 2: 0x10007e9c0 node::OnFatalError(char const*, char const*) [/usr/local/Cellar/node/13.8.0/bin/node]
 3: 0x10017e6ab v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [/usr/local/Cellar/node/13.8.0/bin/node]

Мой код выглядит следующим образом:

require('dotenv').config()

const express = require('express') 
const app = express()
const mongoose = require('mongoose')

mongoose.connect(process.env.DATABASE_URL, { useNewUrlParser: true , useUnifiedTopology: true })
const db = mongoose.connection
db.on('error', (error) => console.error(error))
db.once('open', () => console.log('Connected to Database'))

app.use(express.json())

const articlesRouter = require('./routes/articles')
app.use('/articles', articlesRouter)

app.listen(3000, () => console.log('Server Started'))

Мои маршруты; Я пытаюсь отправить запрос GET, чтобы получить все статьи в БД (которые находятся в коллекции статей):

const express = require('express')
const router = express.Router()
const Article = require('../models/articles')

//Getting All Articles
router.get('/', async (req, res) => {
  try {
      const articles = await Article.find()
      res.json(articles)
  } catch (err){
    res.status(500).json({message: err.message})
  }
})

//Getting One Article
router.get('/:id', (req, res) => {

})

module.exports = router

Если я поменяю router.get на этот router.get('/articles', async (req, res) Почтальон больше не будет завис, но выкинь следующую ошибку:

<code><!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <title>Error</title>
</head>

<body>
    <pre>Cannot GET /articles

И мои маршруты:

const mongoose = require('mongoose')

const articlesSchema = new mongoose.Schema({
    author: String, content: String, description: String, publishedAt: Date, source_id: String, summarization: String, title: String, url: String, urlToImage: String}, { collection: 'Articles'});

module.exports = mongoose.model('article', articlesSchema)

Как я уже упоминал в начале, это моя первая попытка построить REST API. Будем весьма благодарны за любую помощь, которую вы можете оказать, чтобы выяснить, почему GET-запрос Postman не выполняется.

1 Ответ

1 голос
/ 28 февраля 2020

Ваш код кажется правильным. Одна вещь, с которой я столкнулся, - в вашем маршруте вы указываете только

`router.get('/', async (req, res) =>{})`

, и вы называете api как "localhost:3000/articles", что неверно. Вы не указали маршрут как

router.get('/articles', async (req, res) =>{}).

поэтому почтальон не может найти такой маршрут и не отвечает ни на один. Попробуйте с маршрутом, который я указал выше, или назовите только "localhost:3000/", как вы указали в маршрутах.

Еще одна вещь, которую вы можете сделать, это просто вставить следующую строку в файл приложения. js и больше не нужно ничего менять в вашем коде.

app.use('/articles', articlesRouter)

Надеюсь, это поможет вам.

...