Используйте Express JS, чтобы заблокировать нежелательные запросы со стороны клиента. - PullRequest
0 голосов
/ 22 февраля 2020

Рассмотрим маршрутизатор Express:

const express = require("express");
const router = express.Router();
const DUMMY_PLACES = [
  {
    id: "p1",
    title: "Empire State Building",
    description: "One of the most famous sky scrapers in the world!",
    location: {
      lat: 40.7484474,
      lng: -73.9871516
    },
    address: "20 W 34th St, New York, NY 10001",
    creator: "u1"
  }
];


// @ http://localhost:5000/api/places/user/u1
router.get("/user/:uid", (req, res, next) => {
  const user_id = req.params.uid;
  const place = DUMMY_PLACES.find(p => {
    return p.creator === user_id;
  });

  return res.status(200).json({
    place
  });
});

module.exports = router;

и сервер:

const express = require("express");
const bodyParser = require("body-parser");
const app = express();

const placesRoutes = require("./routes/places-routes");
app.use("/api/places", placesRoutes);

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

Когда клиенты нажимают на запрос http://localhost:5000/api/places/user/u1, они получают фиктивный объект ... однако при нажатии на запрос

http://localhost:5000/api/places/user

... он создает пустой объект.

Как я могу вернуть что-то вроде NOT ALLOWED вместо пустого объекта?

Ответы [ 2 ]

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

Коды состояния HTTP созданы для решения многих ситуаций. В вашем случае произошла ошибка клиента: запрошенный ресурс не был найден на сервере (ошибка 404).

В этом случае ваш API может измениться следующим образом:

router.get("/user/:uid", (req, res, next) => {
  const user_id = req.params.uid;
  const place = DUMMY_PLACES.find(p => {
    return p.creator === user_id;
  });

  if (!place) { // if the place does not exist
    return res.status(404).json({
      message: 'The requested resource has not been found in the server.'
    });
  }

  return res.status(200).json({
    place
  });
});
1 голос
/ 22 февраля 2020

Может быть, вы могли бы проверить наличие user_id и отправить ответ об ошибке, если его нет?

router.get('/user/:uid', (req, res, next) => {
  const user_id = req.params.uid

  if (!user_id) {
    return res.status(400).json({
      error: 'User ID required'
    })
  }

  const place = DUMMY_PLACES.find((p) => {
    return p.creator === user_id
  })

  return res.status(200).json({
    place
  })
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...