首页 > 解决方案 > 如何消除验证错误?

问题描述

我正在尝试使用 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.

标签: mongodbexpressmongoose

解决方案


首先你应该使用app.use(bodyParser.json());解析 request.body 并且req.body.meme应该是这样的:

{
  MemeOwner : "something",
  Caption: "something",
  MemeURL: "something"
}

您可以 console.log(req.body.meme) 并调试您的代码


推荐阅读