Невозможно получить из конечной точки в Express. js - PullRequest
0 голосов
/ 01 августа 2020

У меня две конечные точки в моем приложении express, одна - / ping - не принимает никаких параметров и работает нормально, другая - / posts, которая принимает один обязательный параметр 'tag' и два необязательных параметра 'sortBy' и ' direction '.

Приложение запускается, а в Postman / ping отлично работает с GET, однако / posts не работает должным образом

const express = require('express')
const apicache = require('apicache')
const bodyParser = require('body-parser');
const PORT = process.env.PORT || 8080; //use 8080 or use whatever Heroku gives you
const { ping, getPosts } = require('./controller')

const app = express()
//app.use(express.json())
app.use(bodyParser.json())
const cache = apicache.middleware; //as described on https://www.npmjs.com/package/apicache

app.get('/api/ping', ping) //the first requirement, a ping endpoint


app.get('/api/posts/:tag/:sortBy?/:direction?', cache('5 minutes'), getPosts) //second requirement, an endpoint that fetches posts from the hatchways website

app.listen(PORT, () => {
    console.log(`Listening on port ${PORT}`)
})

Теперь согласно Express docs Я бы ожидал, что URL-адрес "localhost: 8080 / api / posts? tag = tech" будет работать, однако Почтальон говорит, что не может GET / api / posts. Что работает, попадает в URL-адрес "localhost: 8080 / api / posts / tag / tech "это не то, на что должно реагировать это приложение.

Я думаю, мне что-то не хватает в спецификациях URL. Мне нужно, чтобы он работал на localhost: 8080 / api / posts? Tag = tech, а не на localhost: 8080 / api / posts / tag / tech

Помощь приветствуется, спасибо.

1 Ответ

0 голосов
/ 01 августа 2020

Похоже, вы немного запутались в запросах и параметрах маршрута.

Запрос является частью URL-адреса, и он выглядит так:

https://example.com/api/posts?tag=tech&this=that+something

Хотя параметры маршрута (вроде) похожи, они не то же самое. Он выглядит как обычный URL, но его части могут отличаться.

В настоящее время вы определяете свой express маршрут для приема параметров маршрута , а не запросов . Чтобы он работал с запросами, просто сделайте следующее:

// Remove the 3 route parameters, and do this instead.
app.get('/api/posts', cache('5 minutes'), getPosts);

И убедитесь, что вы используете req.query в своем getPosts контроллере:

exports.getPosts = function(req, res) {
  // Get whatever you need in req.query
  // In your case you need tag, sortBy, and direction.
  const { tag, sortBy, direction } = req.query;

  // You API code.
}

Теперь ваш express API должен работать должным образом.

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