Express nodejs不使用带表单数据的mongoose插入数据

问题描述 投票:0回答:1

从最近2周我无法使用表单数据发布数据插入数据库它总是显示400错误请求这里是我的代码我的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);
});
here is my Controller file code

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);

这个我的路线文件routes.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错误的请求我无法理解我做错了哪里请帮助我从最近2周卡在这里当我使用表格数据发送我的数据它显示这个错误其他明智它与urlencoded和raw工作正常。目前正在对邮递员进行测试。我也尝试了这个反应,但显示同样的问题

javascript node.js mongodb express mongoose
1个回答
0
投票

您需要使用适当的中间件来解析表单数据,以便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);
    }
})
}

如果同样的问题出现在其他地方,那么也在那里使用它。谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.