如何启动NodeJS帖子



我正在尝试使用POST创建餐厅的示例API,但在启动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');

我认为主要是路由器的问题,但想知道在哪里?所以,分享任何想法。非常感谢。

此请求处理程序:

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方法的对象

最新更新