node.js - 猫鼬需要真正的 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
需要路径
你能帮我吗?谢谢!
解决方案
之所以出错,是因为您的req.body.name
为空或为空。为什么它为空、空或未定义?因为data
当您发送创建请求时,您没有将您的内容添加到您的身体中。
你可以看到你的端点:
HTTP POST:http://localhost:3002/products/create?name=Jorge&price=20
这不是关于req.body
,这是一个req.params
。所以你可以使用req.params.name
and 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')
})
};
我希望它可以帮助你。
推荐阅读
- php - php-lampp-ubuntu:包含功能不起作用
- r - 按名称将变量传递给调用 dplyr 的函数?
- r - R - 按组的最大值在序列中插入缺失的数字
- ibm-cloud - IBM Watson Assistant:如何训练聊天机器人选择正确的意图?
- javascript - JavaScript中的Caesars Cipher - 为什么'A'在这里变成'['?
- android - 如何根据视频大小限制 Seek Bar?
- ios - 非可选字符串自动更改为可选
- mysql - 如何创建文章表、分类和标签?
- r - 如何使用 dplyr 删除所有列中具有 NA 的行?
- java - 在 Jboss Wildfly 上部署 EAR 文件失败