简体   繁体   English

值错误:未定义,当我尝试使用节点/快速服务器将一些信息保存到 mongo db 集合时

[英]Error of value: undefined,when i try to save some information to a mongo db collection using a node/express server

Expected behavior To save the new page to mongo db after server validation of input;预期行为在服务器验证输入后将新页面保存到 mongo db; without any errors in the console.控制台中没有任何错误。 I suspect the error is coming from the post method in the routes in admin_pages.js i just cant trace it我怀疑错误来自 admin_pages.js 路由中的 post 方法,我无法追踪它

I have a basic node/express app set up,with mongodb for my database.I have a bunch of files in my directory which looks like this File directory我有一个基本的 node/express 应用程序设置,我的数据库使用 mongodb。我的目录中有一堆文件,看起来像这个文件目录

-models     
    -page.js
-public
    -css
-views
    -layouts
        adminheader.js
    -admin
        addpage.ejs
    index.ejs
    messages.ejs
-routes
    admin_pages.js

I add a page using bodyparser to get user input and save it to the mongodb database while checking for errors which gets done succesfully.The problem is that i still get an error on the console which looks like this我使用 bodyparser 添加一个页面来获取用户输入并将其保存到 mongodb 数据库,同时检查成功完成的错误。问题是我仍然在控制台上收到一个错误,看起来像这样

Server started on port3000 Connected to Mongoose [ { value: undefined, msg: 'Content cannot be empty', param: 'content', location: 'body' } ]服务器在 port3000 上启动连接到 Mongoose [ { value: undefined, msg: 'Content cannot be empty', param: 'content', location: 'body' } ]

The code for this is here add_page.ejs代码在这里add_page.ejs

<%- include('../_layouts/adminheader') %>


<h2 class="page-title">Add a page</h2>
<a href="/admin/pages" class="btn btn-primary">Back to all pages</a>
<br><br>

<form method="post" action="/admin/pages/add-page">

    <div class="form-group">
        <label for="">Title</label>
        <input type="text" class="form-control" name="title" value="<%= title %>" placeholder="Title" id="title">
    </div>

    <div class="form-group">
        <label for="">Slug</label>
        <input type="text" class="form-control" name="slug" value="<%= slug %>" placeholder="Slug" id="slug">
    </div>

    <div class="form-group">
        <label for="">Content</label>
        <textarea name="content" class="form-control" id="ta" cols="30" rows="10"
                  placeholder="Content"><%= content %></textarea>
    </div>


    <button class="btn btn-light" id="addpage-btn" type="submit">Submit</button>
</form>

<%- include('../_layouts/adminfooter') %>

admin_pages.js admin_pages.js

var express = require('express');
var router = express.Router();

var {check, validationResult} = require('express-validator');


// Get Page model
var Page = require('../models/page');

/*
Get page Index
*/
router.get('/', function (req, res) {
    Page.find({}).sort({sorting: 1}).exec(function (err, pages) {
        res.render('admin/pages', {
            pages: pages
        });
    });
});

/*
Get add page
*/
router.get('/add-page', function (req, res) {

    var title = "";
    var slug = "";
    var content = "";

    res.render('admin/add_page', {
        title: title,
        slug: slug,
        content: content
    });

});


// Post Add Page
router.post('/add-page', [
        check('title', 'Title cannot be empty').isLength({min: 1}),
        check('content', 'Content cannot be empty').isLength({min: 1}),
    ],
    (req, res) => {

        var title = req.body.title;

        var slug = req.body.slug.replace(' ', '-').toLowerCase();
        if (slug == "") slug = title.replace(' ', '-').toLowerCase();

        var content = req.body.content;
        let errors = validationResult(req);

        if (!errors.isEmpty()) {
            console.log(errors.array());
            res.render('admin/add_page', {
                errors: errors.array(),
                title: title,
                slug: slug,
                content: content
            });
        } else {
            Page.findOne({slug: slug}, function (err, page) {
                if (page) {
                    req.flash('danger', 'Page slug exists, choose another.');
                    res.render('admin/add_page', {
                        title: title,
                        slug: slug,
                        content: content
                    });
                } else {
                    var page = new Page({
                        title: title,
                        slug: slug,
                        content: content,
                        sorting: 100
                    });

                    page.save(function (err) {

                        if (err)
                            return console.log(err);

                        Page.find({}).sort({sorting: 1}).exec(function (err, pages) {
                            if (err) {
                                console.log(err);
                            } else {
                                req.app.locals.pages = pages;
                            }
                        });

                        req.flash('success', 'Page added!');
                        res.redirect('/admin/pages');
                    });
                }
            });
        }
    });

// Sort pages function
function sortPages(ids, callback) {
    var count = 0;

    for (var i = 0; i < ids.length; i++) {
        var id = ids[i];
        count++;

        (function (count) {
            Page.findById(id, function (err, page) {
                page.sorting = count;
                page.save(function (err) {
                    if (err)
                        return console.log(err);
                    ++count;
                    if (count >= ids.length) {
                        callback();
                    }
                });
            });
        })(count);

    }
}

/*
 * POST reorder pages
 */
router.post('/reorder-pages', function (req, res) {
    var ids = req.body['id[]'];

    sortPages(ids, function () {
        Page.find({}).sort({sorting: 1}).exec(function (err, pages) {
            if (err) {
                console.log(err);
            } else {
                req.app.locals.pages = pages;
            }
        });
    });

});


module.exports = router;

page model in page.js page.js 中的页面模型

var mongoose = require('mongoose');

// Page Schema
var PageSchema = mongoose.Schema({

    title: {
        type: String,
        required: true
    },
    slug: {
        type: String
    },
    content: {
        type: String,
        required: true
    },
    sorting: {
        type: Number
    }

});

var Page = module.exports = mongoose.model('Page', PageSchema);

any sought of help will be appreciated .任何寻求帮助将不胜感激。

Make sure, you've to add body-parser to your express server.确保您必须将body-parser添加到您的快速服务器。 It's well looks like this code below:它看起来像下面的代码:

app.use(express.json());
app.use(express.urlencoded({ extended: true}));

And make sure your mongoose schema it's looks like this code below:并确保你的mongoose schema看起来像下面的代码:

// Page Schema
var PageSchema = new mongoose.Schema({

    title: {
        type: String,
        required: true
    },
    slug: {
        type: String
    },
    content: {
        type: String,
        required: true
    },
    sorting: {
        type: Number
    }

});

var Page = module.exports = mongoose.model('Page', PageSchema);

From code above, I've been add code new mongoose.Schema({}) .从上面的代码中,我一直在添加代码new mongoose.Schema({}) You forgot to use new .你忘记使用new

And now, you can try again.现在,您可以再试一次。 I hope it can help you.我希望它能帮助你。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 尝试在下面的代码中访问db.collection时,为什么会得到未定义的信息? - Why am I getting an undefined when I try to access db.collection in the code below? 使用 node.js 和 mongoose 更新 Mongo DB 中的数据,即使集合不存在 - update data in Mongo DB even when collection does not exist using node.js and mongoose .then在我尝试保存在MongoDB中时未定义 - .then is undefined when I try to save in MongoDB 使用 express 从节点服务器向客户端发送数据时出现错误 JavaScript - I get error when sending data using express from node server to client side JavaScript 我在mongo中保存时可以更改收藏名称吗? - Can I change the collection name when I .save in mongo? UnhandledPromiseRejectionWarning:未处理的承诺拒绝错误,我正在使用 Node JS 和 mongo Db - UnhandledPromiseRejectionWarning: Unhandled promise rejection error I am getting I am using Node JS and mongo Db 我正在使用 MEN 堆栈(mongo、express、node) - I am using MEN stack(mongo, express,node) “我在 node.js 连接 mongo db 时出错” - "I got error in node.js to connect mongo db" 尝试提供静态文件时未定义 Node JS Express - Node JS Express is not defined when I try to serve static files 节点/快递未将更新的公司信息保存到数据库 - Node/Express not saving updated company information to DB
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM