【问题标题】:How to eradicate validation errors?如何消除验证错误?
【发布时间】: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.

【问题讨论】:

    标签: mongodb express mongoose


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-10
      • 1970-01-01
      • 2020-03-12
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多