繁体   English   中英

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

[英]Showing Error in NodeJS+Express : “Cannot GET /…”

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

Controller (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
        });
    });
}

Model (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');

路由器.js

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

const router = express.Router();

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

module.exports = router;

应用程序.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" 请分享一些想法。

我在您要求的 model 中发现了一个错误

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM