Отображение ошибки в NodeJS Express: «Не удается получить / …»

#node.js #mongodb #api #express #router

#node.js #mongodb #API #экспресс #маршрутизатор

Вопрос:

Я пытаюсь создать API для ресторанов и разработал его controller и model , как показано ниже.

Контроллер (restaurantData.js )

 const restaurantData = require('../Models/restaurantData');

exports.getRestaurantData = (req, res) => {
    console.log(req.params.city_id.toString())
    restaurantData.find({
        city_id: req.params.city_id.toString()
    }).then(result => {
        res.status(200).json({
            message: "Restaurant Data",
            restaurants: result
        });
    }).catch(error => {
        res.status(500).json({
            message: error
        });
    });
}
 

Модель (restaurantData.js )

 const mongoose = require('mongoose');

const Schema = mongoose.Schema;

const restaurantSchema = new Schema({
    _id: {
        type: Number,
        required: true
    },
    name: {
        type: String,
        required: true
    },
    city_name:{
        type: String,
        required: true
    },
    city_id: {
        type: String,
        required: true
    },
    location_id: {
        type: Number,
        required: true
    },
    area: {
        type: Number,
        required: true
    },
    locality:{
        type: String,
        required: true
    },
    thumb: {
        type: String,
        required: true
    },
    cost:{
        type: Number,
        required: true
    },
    address:{
        type: String,
        required: true
    },
    mealtype:{
        type: Number,
        required: true
    },
    name:{
        type: String,
            required: true
        },    
    cuisine:{
        type: Number,
        required: true
    },
    type:{
        type: Array,
        required: true
    },
    Cuisine:{
        type: Array,
        required: true
    }
});

module.exports = mongoose.model('restaurantData', restaurantSchema, 'restaurantData');
 

router.js

 const express = require('express');
const restaurantController = require('../Controllers/restaurantData');

const router = express.Router();

router.get('/restaurantData/:cityID',restaurantController.getRestaurantData);

module.exports = router;
 

app.js

 const express = require('express');
const bodyparser = require('body-parser');
const mongoose = require('mongoose');

const apiRouter = require('./Routes/router');

const port = 4005;
const app = express();

app.use(bodyparser.json());

app.use((req, res, next) => {
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST');
    res.setHeader('Access-Control-Allow-Headers','Content-Type, Authorization');
    next();
});

app.use('/api', apiRouter);

mongoose.connect(
    'mongodb://127.0.0.1:27017/sampleRestaurant',
    { useNewUrlParser: true, useUnifiedTopology: true }
).then(success => {
    console.log('Connected to MongoDB');

    app.listen(port, () => {
        console.log(`Server started at port ${port}`);
    });

}).catch(error => {
    console.log(error);
});
 

Проблема в том, что при запуске Postman он показывает ошибку "Cannot GET /api/restaurantData" . Пожалуйста, поделитесь некоторыми идеями.

Ответ №1:

Я обнаружил ошибку в вашей модели, в которой вы запрашиваете

req.params.city_id.toString()

что неверно и необходимо для преобразования в строку.

вы должны использовать это вместо:

 const restaurantData = require('../Models/restaurantData');

exports.getRestaurantData = (req, res) => {
    const cityId = req.params.cityID;
    console.log(cityId)
    restaurantData.find({
        city_id: cityId
    }).then(result => {
        res.status(200).json({
            message: "Restaurant Data",
            restaurants: result
        });
    }).catch(error => {
        res.status(500).json({
            message: error
        });
    });
}
 

причина в том, что вам требуется параметр city_id вместо CityId, который вы используете в своем маршруте:

router.get(‘/restaurantData/:cityID’,restaurantController.getRestaurantData);