mongodb - 如何消除验证错误?
问题描述
我正在尝试使用 express 和 mongodb,mongoose 制作一个简单的应用程序,其中用户在表单中提交信息,一旦用户提交有关 meme 的信息,它就会被路由到 /meme,我在模式中添加了 required=true从服务器端进行验证,但低于错误
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Meme Maker</title>
</head>
<body>
<h1>Meme Streme</h1>
<form action="/memes" method="POST">
<label for="memeowner">Meme Owner</label>
<input type="text" name="memes[MemeOwner]" id="memeowner" placeholder="Enter Your Full Name" required />
<label for="caption">Caption</label>
<input type="text" name="memes[Caption]" id="caption" placeholder="Be Creative with the Caption" required />
<div class="flexContainer">
<label for="url">Meme URL</label>
<input type="text" name="memes[MemeURL]" id="url" placeholder="Enter URL of your meme here" required />
<button>Submit Meme</button>
</div>
</form>
<style>
body {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.flexContainer {
display: flex;
}
.inputField {
flex: 1;
}
</style>
</body>
</html>
下面是 app.js 文件
const express = require('express')
const mongoose = require('mongoose')
const app = express();
const path = require('path')
const ejsMate = require('ejs-mate')
const Joi = require('joi')
const meme = require('./models/memeschema')
const methodoverride = require('method-override');
mongoose.connect('mongodb://localhost:27017/memekeeper', {
useNewUrlParser: true,
useCreateIndex: true,
useUnifiedTopology: true
})
const db = mongoose.connection;
db.on("error", console.error.bind(console, "connection error:"));
db.once("open", () => {
console.log("Database connected")
});
app.engine('ejs', ejsMate)
app.set('view engine', 'ejs')
app.set('views', path.join(__dirname, 'views'))
app.use(methodoverride('_method'));
app.use(express.urlencoded({ extended: true }))
app.get('/', async (req, res) => {
res.render('new')
})
app.post('/memes', async (req, res) => {
// console.dir(req.body.meme)
const newmemes = new meme(req.body.meme);
console.log(newmemes)
await newmemes.save()
res.redirect('/')
})
app.listen(3000, () => {
console.log('Serving on port 3000')
})
下面是架构文件
const mongoose = require('mongoose')
const Schema = mongoose.Schema;
const XmemeSchema = new Schema({
MemeOwner:
{
type: String,
required: true
},
Caption:
{
type: String,
required: true
},
MemeURL:
{
type: String,
required: true
}
})
module.exports = mongoose.model('memesmodel', XmemeSchema)
以下是我收到的错误错误
{ _id: 601c2b5aaa1c1958e0fa1337 }
(node:22752) UnhandledPromiseRejectionWarning: ValidationError: memesmodel validation failed: MemeURL: Path `MemeURL` is required., Caption: Path `Caption` is required., MemeOwner: Path `MemeOwner` is required.
解决方案
首先你应该使用app.use(bodyParser.json());
解析 request.body 并且req.body.meme
应该是这样的:
{
MemeOwner : "something",
Caption: "something",
MemeURL: "something"
}
您可以 console.log(req.body.meme) 并调试您的代码
推荐阅读
- jquery - 什么是 Google AdSense 产品名称?
- spring-cloud - 自定义 Eureka Server 仪表板
- angular - 从 Angular 中的 Parent 订阅子模型更改
- ruby-on-rails - 删除并创建新的作者记录后,Rails 更新 book 表中的 author_id
- laravel - 如何计算 laravel 刀片第一行中嵌套 foreach 的总数?
- php - LinkedIn Rich Media 共享媒体
- javascript - 将参数传递给父类的替代方法
- python - 如何从数据库中获取 django 中带有 id 的唯一值
- c++ - 如何在没有重复代码的情况下创建两个模板版本以获取数组开始和结束(使用 T* 和它)?
- python - 如何在 Django 模板中进行日期格式设置?