首页 > 解决方案 > 猫鼬需要真正的 req.body.name {}

问题描述

如果我将 required 设置为 false,它将成功地在 MongoDB 数据库中创建一个具有一个 id 的对象。我有时会感到困惑,如果需要,请查看我的个人资料。我认为这是一件小事。如果您需要更多信息,请发表评论。

应用程序.js

var express = require('express');
var bodyParser = require('body-parser');
var product = require('./routes/product'); // Imports routes for the products
var app = express();
var mongoose = require('mongoose'); // Set up mongoose connection

var dev_db_url = 'mongodb://localhost/Product';
var mongoDB = process.env.MONGODB_URI || dev_db_url;
mongoose.connect(mongoDB, {useNewUrlParser: true, useUnifiedTopology: true});
mongoose.Promise = global.Promise;
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB connection error:'));

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use('/products', product);


var port = 3002;

app.listen(port, () => {
    console.log('Server is up on port numbner ' + port);
});

模型.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var ProductSchema = new Schema({
    name: {type: String, required: true, max: 100},
    price: {type: Number, required: true},
});

module.exports = mongoose.model('Product', ProductSchema);

控制器.js

var Product = require('../models/product');

//Simple version, without validation or sanitation
exports.test = function (req, res) {
    res.send('Greetings from the Test controller!');
};

exports.product_create = function (req, res, next) {
    var product = new Product(
        {
            name: req.body.name,
            bags: req.body.bags
        }
    );
    console.log(JSON.stringify(req.body))
    product.save(function (err) {
        if (err) {
            return next(err);
        }
        res.send('Bags Created successfully')
    })
};

路由器.js

var express = require('express');
var router = express.Router();

// Require the controllers WHICH WE DID NOT CREATE YET!!
var product_controller = require('../controllers/product');

// a simple test url to check that all of our files are communicating correctly.
router.get('/test', product_controller.test);


router.post('/create', product_controller.product_create);

module.exports = router;

HTTP POST:http://localhost:3002/products/create?name=Jorge&price=20

ValidationError:产品验证失败:名称:name需要路径

你能帮我吗?谢谢!

标签: node.jsexpress

解决方案


之所以出错,是因为您的req.body.name为空或为空。为什么它为空、空或未定义?因为data当您发送创建请求时,您没有将您的内容添加到您的身体中。

你可以看到你的端点:

HTTP POST:http://localhost:3002/products/create?name=Jorge&price=20

这不是关于req.body,这是一个req.params。所以你可以使用req.params.nameand req.params.price

️‍♂️ 所以,如果您使用参数传递数据,您的code遗嘱如下所示:

exports.product_create = function (req, res, next) {
    var product = new Product(
        {
            name: req.params.name,
            price: req.params.price
        }
    );
    console.log(req.params);
    product.save(function (err) {
        if (err) {
            return next(err);
        }
        res.send('Bags Created successfully')
    })
};

如果您想使用,如果您使用的是 Postman req.body,请将您的json对象添加到。body

️‍♂️ 您可以看到下图:在向后端发送请求之前,使用邮递员将数据传递到正文的示例。create

在此处输入图像描述

因此,如果您从 body 传递数据,那么您的code遗嘱将如下所示:

exports.product_create = function (req, res, next) {
    var product = new Product(
        {
            name: req.body.name,
            price: req.body.price
        }
    );
    console.log(req.body);
    product.save(function (err) {
        if (err) {
            return next(err);
        }
        res.send('Bags Created successfully')
    })
};

我希望它可以帮助你。


推荐阅读