簡體   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