getting the following error while sending a request from postman
I am trying to create a hotel but when I send my post request to the server I am getting this response saying 500 internal server error.I am not able to find any error in the code .Can anyone tell me what’s the issue.
I am sending this request
localhost:8000/api/hotel
{
"errors": {
"cheapestPrice": {
"name": "ValidatorError",
"message": "Path `cheapestPrice` is required.",
"properties": {
"message": "Path `cheapestPrice` is required.",
"type": "required",
"path": "cheapestPrice"
},
"kind": "required",
"path": "cheapestPrice"
},
"desc": {
"name": "ValidatorError",
"message": "Path `desc` is required.",
"properties": {
"message": "Path `desc` is required.",
"type": "required",
"path": "desc"
},
"kind": "required",
"path": "desc"
},
"title": {
"name": "ValidatorError",
"message": "Path `title` is required.",
"properties": {
"message": "Path `title` is required.",
"type": "required",
"path": "title"
},
"kind": "required",
"path": "title"
},
"distance": {
"name": "ValidatorError",
"message": "Path `distance` is required.",
"properties": {
"message": "Path `distance` is required.",
"type": "required",
"path": "distance"
},
"kind": "required",
"path": "distance"
},
"address": {
"name": "ValidatorError",
"message": "Path `address` is required.",
"properties": {
"message": "Path `address` is required.",
"type": "required",
"path": "address"
},
"kind": "required",
"path": "address"
},
"city": {
"name": "ValidatorError",
"message": "Path `city` is required.",
"properties": {
"message": "Path `city` is required.",
"type": "required",
"path": "city"
},
"kind": "required",
"path": "city"
},
"type": {
"name": "ValidatorError",
"message": "Path `type` is required.",
"properties": {
"message": "Path `type` is required.",
"type": "required",
"path": "type"
},
"kind": "required",
"path": "type"
},
"name": {
"name": "ValidatorError",
"message": "Path `name` is required.",
"properties": {
"message": "Path `name` is required.",
"type": "required",
"path": "name"
},
"kind": "required",
"path": "name"
}
},
"_message": "Hotel validation failed",
"name": "ValidationError",
"message": "Hotel validation failed: cheapestPrice: Path `cheapestPrice` is required., desc: Path `desc` is required., title: Path `title` is required., distance: Path `distance` is required., address: Path `address` is required., city: Path `city` is required., type: Path `type` is required., name: Path `name` is required."
}
this is the model Hotel.js file
import mongoose from "mongoose";
const {Schema} = mongoose
const HotelSchema = new mongoose.Schema({
name:{
type:String,
required:true
},
type:{
type:String,
required:true
},
city:{
type:String,
required:true
},
address:{
type:String,
required:true
},
distance:{
type:String,
required:true
},
photos:{
type:[String],
},
title:{
type:String,
required:true
},
desc:{
type: String,
required:true
},
rating:{
type: Number,
min:0,
max:5
},
rooms:{
type:[String]
},
// for showing cheapest hotels
cheapestPrice:{
type:Number,
required:true
},
// for showing featured hotels
featured:{
type:Boolean,
deafult:false,
}
})
export default mongoose.model("Hotel",HotelSchema)
This is the route hotel.js
import express from "express"
import Hotel from "../models/Hotel.js";
const router = express.Router();
router.post("/", async (req,res)=>{
const newHotel = new Hotel(req.body);
try{
const savedHotel = await newHotel.save()
res.status(200).json(savedHotel)
}catch(err){
res.status(500).json(err)
}
})
export default router
This is the main index.js file
import express from "express"
import dotenv from "dotenv"
import mongoose from "mongoose"
import hotelRoute from './routes/hotels.js'
const app = express()
dotenv.config()
const connect = async () =>{
try{
await mongoose.connect(process.env.MONGO)
console.log("Connected to mongodb")
}catch(err){
throw err;
}
}
mongoose.connection.on("connected",()=>{
console.log("mongodb connected")
})
mongoose.connection.on("disconnected",()=>{
console.log("mongodb disconnected")
})
//Middleware
app.use(express.urlencoded({extended:true}))
app.use(express.json())
app.use("/api/hotel",hotelRoute)
app.listen(8000,() =>{
connect()
console.log("Connected to backend")
})
}
In the console I’m getting
Connected to backend
mongodb connected
Connected to mongodb
3
Answers
first you must check your req.body data.
you can validate your req.body with joi validator
and (or) express-joi-validation.
in mongoose you must generate a model from your schema:
The post method URL = http://localhost:8800/api/hotels
try using http://
As you are using the POST method via Postman.
The same issue happened to me. The thing I was missing is the data-type to JSON.
You might be sending the request as data-type text.