Как я могу запустить сообщение NodeJS?

#javascript #node.js #mongodb #api #mongoose

#javascript #node.js #mongodb #API #мангуст

Вопрос:

Я пытаюсь создать образец API ресторанов, используя POST, но после запуска API и загрузки его в Postman он не показывает результатов.

router.js

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

const router = express.Router();

router.post('/restaurantFilter',(req, res) => {
    restaurantController.getfilter
});

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('/api', apiRouter);

mongoose.connect(
    'mongodb://127.0.0.1:27017/sample',
    { 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);
});
 

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

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

exports.getfilter = (req, res) => {
    const city_name = req.body.city_name;
    const cost = req.body.cost;
    restaurants.find({
        city_name: city_name,
        cost: cost
    }).then(result => {
        res.status(200).json({
            message: "Filtered Data",
            result
        })
    }).catch(error => {
        res.status(500).json({
        message: error
        })
    })
}
 

restaurantData.js (Модель)

 const mongoose = require('mongoose');

const Schema = mongoose.Schema;

const restaurantSchema = new Schema({
    name: {
        type: String,
        required: true
    },
    city_name:{
        type: String,
        required: true
    },
    city: {
        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');
 

Я думаю, что в основном это проблема с маршрутизатором, но пытаюсь узнать, где? Итак, поделитесь любыми идеями. Спасибо.

Комментарии:

1. В вашем router.post() попробуйте изменить restaurantController.getfilter на res.send(restaurantController.getfilter)

2. @hisam — Это неверно. restaurantController.getfilter это функция, и ее нужно вызвать и передать req и res .

Ответ №1:

Этот обработчик запроса:

 router.post('/restaurantFilter',(req, res) => {
    restaurantController.getfilter
});
 

На самом деле getfilter функция не вызывается, поэтому из запроса POST ничего не отправляется. Вы можете исправить это, выполнив следующее:

 router.post('/restaurantFilter', restaurantController.getfilter);
 

или это:

 router.post('/restaurantFilter',(req, res) => {
    restaurantController.getfilter(req, res);
});
 

Тогда, похоже, вам также нужно экспортировать и импортировать эту getfilter() функцию. Похоже, вы просто отлично экспортируете его в restaurant.js :

 exports.getfilter = (req, res) => { ... });
 

Но, похоже, вы неправильно импортируете контроллер, когда делаете это:

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

Когда кажется, что вы должны это делать:

 const restaurantController = require('../Controllers/restaurant.js');
 

таким образом, вы назначаете контроллеру объект, для которого на самом деле есть getfilter метод.