【发布时间】:2021-02-05 02:02:49
【问题描述】:
我正在尝试使用 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.
【问题讨论】: