我正在使用带有 express 和 mongoose 的 API 将事件添加到我的数据库中,但是我在使用 axios 时出现错误 422,但使用 Postman 时却没有。
顺便说一下,我正在使用 Vue3 项目
错误是:加载资源失败:服务器响应状态为 422(不可处理实体)
这是我的 API 代码:
//Degustations.model.js
const mongoose = require('mongoose')
const degustationsSchema = new mongoose.Schema(
{
title: {
type: String,
required: true,
},
description: {
type: String,
required: true
},
price: {
type: Number,
required: true
},
places: {
type: Number,
required: true
},
places_left: {
type: Number,
},
date: {
type: String,
required: true
},
image:{
type: String,
},
ref:{
type: String,
}
},
{
timestamps: true
}
)
const Degustations = mongoose.model('degustation', degustationsSchema)
module.exports = {
Degustations
}
// Degustations.ctrl.js
const Degustations = require('../models/degustations.model').Degustations
var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
const xhr = new XMLHttpRequest()
xhr.withCredentials = true
module.exports = async (req, res, next) => {
await Degustations
.create(req.value.body)
.then((inserted) => {
console.log('✅ Success to add:', inserted._id)
return res.status(201).json({
message: `content ${result._id} created`,
result: inserted,
})
})
.catch((err) => {
console.log('? Error to add:', err)
if (err.code === 11000) {
res
.status(409)
.json({ message: 'this address email already existing' })
} else if (
err.errors &&
Object.keys(err.errors).length > 0 &&
err.name === 'ValidationError'
) {
res.status(422).json({ message: err.message })
} else {
res.status(500).json(err)
}
})
}
function findAll(req, res) {
return Degustations.find()
.exec()
.then((result) => {
if (result.length > 0) {
res.json(result)
} else {
res.status(202).json({ message: 'no users available' })
}
})
.catch((err) => {
res.status(500).json(err)
})
}
function deleteById(req, res) {
// Récupération de l'id
const id = req.params.id
// Requête Mongoose - https://mongoosejs.com/docs/api.html#model_Model.findByIdAndRemove
return Content.findByIdAndRemove({ _id: id })
.then((result) => {
if (result) {
// Présence d'un objet de données
res.json({ message: `user ${id} deleted` })
} else {
// Ligne non existante
res.status(404).json({ message: `degustation ${id} not found` })
}
})
.catch((err) => {
res.status(500).json(err)
})
}
module.exports = {
saveOne,
findAll,
deleteById,
}
这是我的 axios 测试请求,我遇到了错误:
async addEvent() {
this.axios.post("http://localhost:3000/api/v1/degustations", {
data: {
title: "eazeazea",
description: "Venez profitez de ce truc là ouais",
price: "15",
places: "12",
date: "2000-07-05T00:00:00.000Z",
image: "",
places_left: "8",
ref: "prod_Jq4Z4YfZeMtOJi",
},
}).then((response) => console.log(response));
}
但这里是邮递员生成的代码,它也不起作用,但简单的邮递员请求正在工作:
var axios = require('axios');
var qs = require('qs');
var data = qs.stringify({
'title': 'eazeazea',
'description': 'Venez profitez de ce truc là ouais',
'price': '15',
'places': '12',
'date': '2000-07-05',
'image': '',
'places_left': '8',
'ref': 'prod_Jq4Z4YfZeMtOJi'
});
var config = {
method: 'post',
url: 'http://localhost:3000/api/v1/degustations',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
data : data
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
有人知道如何解决这个错误吗?
这是我的路线代码:
// index.routes.js
const express = require('express')
const router = express.Router()
// Endpoint des utilisateurs
router.use('/api/v1/content', require('./content.routes'))
router.use('/api/v1/users', require('./users.routes'))
router.use('/api/v1/degustations', require('./degustations.routes'))
module.exports = router
//Degustations.routes.js
const express = require('express')
const router = express.Router()
const Degustations = require('../controllers/degustations.ctrl')
const m = require('../helpers/middlewares')
router.post('/', Degustations.saveOne);
router.get('/', Degustations.findAll);
module.exports = router
答案 0 :(得分:0)
1- 要在路由中传递一些函数,最好的方法是在控制器函数中使用 module.exports。
2- 我认为你可以创建 async/await 函数。
3- 否则我有更改功能来创建猫鼬, 来简化事情。请向我们提供一些更新。
4- 在此处阅读有关出口声明的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export
看看下面的代码:
module.exports = {
async insert (req, res, next) => {
await Degustations
.create(req.value.body)
.then((inserted) => {
console.log('✅ Success to add:', inserted._id)
return res.status(201).json({
message: `content ${result._id} created`,
result: inserted,
})
})
.catch((err) => {
console.log('? Error to add:', err)
if (err.code === 11000) {
res
.status(409)
.json({ message: 'this address email already existing' })
} else if (
err.errors &&
Object.keys(err.errors).length > 0 &&
err.name === 'ValidationError'
) {
res.status(422).json({ message: err.message })
} else {
res.status(500).json(err)
}
})
},
async findAll() {
// ... your code here ...
},
async deleteById() {
// ... your code here ...
},
}
// to import you can use
const {insert, findAll, deleteById} = require('../controllers/degustations.ctrl')
// OR
const degustations = require('../controllers/degustations.ctrl')
degustations.insert()
degustations.findAll()
degustations.deleteById()