繁体   English   中英

Express Node.js不使用Mongoose和Form-Data插入数据

[英]Express nodejs not inserting data using mongoose with form-data

从过去的两周开始,我无法使用表单数据发布数据以将其插入数据库,它始终显示400错误的请求,这是我的代码My server.js

 require('./db.js') let express = require('express') // let mongoose = require() const app = express() const path = require('path') let routes = require('./routes'); const bodyParser = require('body-parser') app.set('port', 4000); // app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended:false})) app.use('/api', routes); app.use(function(req, res, next){ console.log(req.method, req.url); next(); }) let server = app.listen(app.get('port'), function(){ let port = server.address().port; console.log("Connected Successfully at", + port); }); 
这是我的控制器文件代码

 let mongoose = require('mongoose'); let cat = mongoose.model('Cat') module.exports.addcat = function(req, res){ console.log(req.body); cat. create({ cat_name: req.body.cat_name, cat_description: req.body.cat_description },function(err, cate){ if(err){ console.log(" Error creating Hotel"); res .status(400) .json(err) }else{ console.log("Hotel created", cate); res .status(200) .json(cate); } }) } 

这是我的模式文件shop.models.js

 let mongoose = require('mongoose') let productSchema = new mongoose.Schema({ prod_name : { type:String, required:true }, prod_description : { type:String, required:true }, prod_base_price : { type:Number, required:true }, prod_tax : { type:Number, required:true }, prod_final_price : { type:Number, required:true }, prod_images : [Array], prod_discount : { type:Number, required:true } }) let catSchema = new mongoose.Schema({ cat_name:{ type:String, required:true }, cat_description:{ type:String, required:true } }) mongoose.model("Cat", catSchema); 

这是我的路线文件route.js

 const express = require('express') const router = express.Router(); const ctrlCat = require('../controllers/cat.controller.js') // Category Router router .route('/cat') .get(ctrlCat.getcat) .post(ctrlCat.addcat); router .route('/cat/:catid') .get(ctrlCat.getonecat) .put(ctrlCat.editonecat) .delete(ctrlCat.deletecat); module.exports = router; 

请帮我出去总是显示此错误

 { "errors": { "cat_name": { "message": "Path `cat_name` is required.", "name": "ValidatorError", "properties": { "message": "Path `{PATH}` is required.", "type": "required", "path": "cat_name" }, "kind": "required", "path": "cat_name", "$isValidatorError": true }, "cat_description": { "message": "Path `cat_description` is required.", "name": "ValidatorError", "properties": { "message": "Path `{PATH}` is required.", "type": "required", "path": "cat_description" }, "kind": "required", "path": "cat_description", "$isValidatorError": true } }, "_message": "Cat validation failed", "message": "Cat validation failed: cat_name: Path `cat_name` is required., cat_description: Path `cat_description` is required.", "name": "ValidationError" } 

和400错误的请求,我无法理解m做错了什么,请过去两周来帮助我解决问题。每当我使用form-data发送数据时,它都会显示此错误,否则,使用urlencoded和raw可以正常工作。 目前正在对邮递员进行测试。 我也尝试过反应,但显示相同的问题

您需要使用适当的中间件来解析表单数据,以便req.body将包含表单数据。 如此不加评论

app.use(bodyParser.json());

应该可以。

此外,您应该导出cat模式。

module.exports = mongoose.model(“ Cat”,catSchema);

并要求在控制文件中使用。

const cat = require('/ path / to / cat');

似乎在保存新的cat对象后json响应会产生额外的字符。 您可以尝试手动编辑它。 有点像这样

module.exports.addcat = function(req, res){
console.log(req.body);
cat.
    create({
    cat_name: req.body.cat_name,
    cat_description: req.body.cat_description

},function(err, cate){
    if(err){
        console.log(" Error creating Hotel");
        res
            .status(400)
            .json(err)
    }else{
        console.log("Hotel created", cate);
            //manual editing
            var firstChar = cate.substring(0, 1);
            var firstCharCode = cate.charCodeAt(0);
            if (firstCharCode == 65279) {
                console.log('First character "' + firstChar + '" (character code: ' + firstCharCode + ') is invalid so removing it.');
                cate = cate.substring(1);
            }

            var parsedJson = JSON.parse(cate);
            console.log('parsedJson: ', parsedJson);
            res
                .status(200)
                .json(cate);
    }
})
}

如果同一问题出现在其他地方,也可以在此使用。 谢谢!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM