【问题标题】:How can I start NodeJS post?我怎样才能开始 NodeJS 帖子?
【发布时间】:2021-03-17 03:30:22
【问题描述】:

我正在尝试使用 POST 创建餐厅的示例 API,但在启动 API 并将其加载到 Postman 后,它不显示结果。

路由器.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() 中,尝试将restaurantController.getfilter 更改为res.send(restaurantController.getfilter)
  • @hisam - 这是不正确的。 restaurantController.getfilter是一个函数,需要调用并传递reqres

标签: javascript node.js mongodb api mongoose


【解决方案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 方法的对象分配给控制器。

【讨论】:

    猜你喜欢
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多