在 NodeJS+Express 中显示错误:"Cannot GET /..."

Showing Error in NodeJS+Express : "Cannot GET /..."

我正在尝试为餐馆制作 API 并开发了它的 controllermodel,如下所示。

控制器(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"。请分享一些想法。

我在您要求的模型中发现错误

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);