[英]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.