Tengo algunos problemas al crear una segunda ruta en mi proyecto. Mientras que router.get("/getallrooms") funciona bien, router.post("/getroombyid") me da un mensaje 404 no encontrado:
POST http://localhost:3000/book/api/rooms/getroombyid 404 (Not Found) He adjuntado mi código de rutas, pantalla de reserva, donde intento usar esta ruta getroombyid y el código server.js . Con mucho gusto aceptaré cualquier sugerencia.
const express = require('express'); const router = express.Router(); const Room = require('../models/room') router.get("/getallrooms", async(req, res) =>{ try{ const rooms = await Room.find({}) res.send(rooms) } catch(error){ return res.status(400).json({message: error}); } }); router.post("/getroombyid", async(req, res) => { const roomid = req.body.roomid try { const room = await Room.findOne({'_id' : req.body.roomid}) res.send(room) } catch (error) { return res.status(400).json({ message: error }); } }); module.exports = routerPantalla de reserva
import React, {useState, useEffect} from 'react' import axios from 'axios' function Bookingscreen({match}) { const [loading, setloading] = useState() const [error, seterror] = useState() const [room, setroom] = useState() useEffect(() => { try { setloading(true) async function gettingRoom() { const data = (await axios.post('./api/rooms/getroombyid', {roomid : match.params.roomid})).data setroom(data) setloading(false) } gettingRoom() } catch (error) { seterror(true) console.log(error) setloading(false) } }, []) return ( <div> <h1>Bookingscreen</h1> <h1>Room id = {match.params.roomid}</h1> </div> ) } export default Bookingscreenservidor.js
const express = require("express"); const app = express(); const dbConfig = require('./db') const roomsRoute = require('./routes/roomsRoute') app.use(express.json()) app.use('/api/rooms', roomsRoute) const port = process.env.PORT || 5000; app.listen(port, () => { console.log(`App listening on port ${port}`) });El problema es causado por la siguiente línea, específicamente la parte ./api :
const data = (await axios.post('./api/rooms/getroombyid', {roomid : match.params.roomid})).data Lo que está haciendo es tener en cuenta su URL actual dentro del navegador, que asumo es /book , por lo que la solicitud final se realiza a:
http://localhost:3000/book/api/rooms/getroombyidQue no existe en su back-end. Cambia la linea de arriba por esta:
const data = (await axios.post('/api/rooms/getroombyid', {roomid : match.params.roomid})).data