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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Express nodejs不使用带表单数据的mongoose插入数据相关的知识,希望对你有一定的参考价值。

从最近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工作正常。目前正在对邮递员进行测试。我也尝试了这个反应,但显示同样的问题

答案

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

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

以上是关于Express nodejs不使用带表单数据的mongoose插入数据的主要内容,如果未能解决你的问题,请参考以下文章

nodejs / express:如何使用数据发布到外部表单?

使用 NodeJS Express 时将表单数据插入 MySQL 数据库

带你入门nodejs第二天——http 模块化 npm yarm

带你入门nodejs第二天——http 模块化 npm yarm

使用护照使用 NodeJs mongodb(mongoose) express 的注册表单

图像上传失败 w/nodejs express