[英]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 usenew
.你忘记使用
new
。
And now, you can try again.现在,您可以再试一次。 I hope it can help you.
我希望它能帮助你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.