#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
метод.