我正在使用Express,EJS和MongoDB开发
博客应用程序 (单击链接以查看 GitHub存储
库)。
当然,在提交新帖子之前,我必须 验证表单条目 。我使用 快递验证器 版本6.3.0。
我的addPost控制器:
exports.addPost = (req, res, next) => {
// Form validation rules
check('title', 'The title field id required')
.not()
.isEmpty();
check('excerpt', 'The excerpt field id required')
.not()
.isEmpty();
check('body', 'The full text field id required')
.not()
.isEmpty();
const errors = validationResult(req);
if (!errors.isEmpty()) {
console.log(errors.array());
}
if (!errors.isEmpty()) {
res.render('admin/addpost', {
layout: 'admin/layout',
website_name: 'MEAN Blog',
page_heading: 'Dashboard',
page_subheading: 'Add New Post',
errors: errors
});
req.flash('danger', errors);
req.session.save(() => res.redirect('/dashboard'));
} else {
const post = new Post();
post.title = req.body.title;
post.short_description = req.body.excerpt
post.full_text = req.body.body;
post.save(function(err) {
if (err) {
console.log(err);
return;
} else {
req.flash('success', "The post was successfully added");
req.session.save(() => res.redirect('/dashboard'));
}
});
}
}
邮政模型:
const postSchema = new mongoose.Schema({
title: {
type: String,
required: true
},
short_description: {
type: String,
required: true
},
full_text: {
type: String,
required: true
},
post_image: {
type: String,
required: false
},
updated_at: {
type: Date,
default: Date.now()
},
created_at: {
type: Date,
default: Date.now()
}
});
错误消息也不会在视图中呈现,如下所示:
<div id="messages" class="text-center">
<% Object.keys(messages).forEach(function (type) { %>
<% messages[type].forEach(function (message) { %>
<div class="alert alert-<%= type %>"><%= message %></div>
<% }) %>
<% }) %>
</div>
更新:
根目录中的index.js文件具有以下代码:
const express = require("express");
const dotenv = require("dotenv");
const mongoose = require("mongoose");
const path = require("path");
const morgan = require("morgan");
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const expressLayouts = require("express-ejs-layouts");
const flash = require("express-flash");
const session = require("express-session");
const app = express();
dotenv.config();
//Conect to MONGODB
mongoose
.connect(process.env.MONGO_URI, {
useNewUrlParser: true,
useUnifiedTopology: true
})
.then(() => {
console.log("conected");
});
mongoose.connection.on("error", err => {
console.log(`DB connection error: ${err.message}`);
});
// Set static directory
app.use(express.static(path.join(__dirname, "public")));
// Set views directory
app.set("views", path.join(__dirname, "views"));
// Set view engine
app.set("view engine", "ejs");
// Use Express Layouts
app.use(expressLayouts);
// Morgan Middleware
app.use(morgan("dev"));
// support parsing of application/json type post data
app.use(bodyParser.json());
//support parsing of application/x-www-form-urlencoded post data
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cookieParser());
// Express Sessions Middleware
app.use(session({
secret: '123',
resave: true,
saveUninitialized: true
}));
// Express Messages Middleware
app.use(flash());
app.use(function (req, res, next) {
res.locals.messages = require('express-messages')(req, res);
next();
});
// Bring the Dashboard
const dashboardRoute = require("./routes/admin/dashboard");
// Get Dashboard Routes
app.use('/dashboard', dashboardRoute);
我究竟做错了什么?
exports.addPost = (req, res, next) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
req.flash('errors', errors.array())
req.session.save(() => res.redirect('../addpost'));
//return res.status(400).send(errors.array());
} else {
const post = new Post();
post.title = req.body.title;
post.short_description = req.body.excerpt
post.full_text = req.body.body;
post.save(function(err){
if(err){
console.log(err);
return;
} else {
req.flash('success', "The post was successfully added");
req.session.save(() => res.redirect('/dashboard'));
}
});
}
}
messages.ejs
<div id="messages" class="text-center">
<% Object.keys(messages).forEach(function (type) { %>
<% messages[type].forEach(function (message) { %>
<% if (type === 'errors') {%>
<div class="alert alert-<%= type %>"><%= message.msg %></div>
<%} else { %>
<div class="alert alert-<%= type %>"><%= message %></div>
<% } %>
<% }) %>
<% }) %>
我想这就是你打算做的
一切都很顺利,然后我运行我的代码,我得到了这个错误。 我已经尝试过以下解决方案(没有任何效果): http://stackoverflow.com/questions/22000423/javafx-and-maven-nullpointerexception-location-is-required 应用程序启动方法javafx gui中出现异常 应用程序启动方法中出现异常 JavaFX“loc
问题内容: 与其他框架相比,Node.js + Express.js应用程序中的错误报告/处理似乎有所不同。我理解它的工作原理是否正确? A) 通过接收错误作为回调函数的参数来 检测 错误。例如: B) 通过调用next(err) 报告 MIDDLEWARE中的错误。例: C) 通过抛出错误来 报告 路由中的错误。例: d) 手柄 通过配置通过app.error自己的错误处理的错误()或使用通
问题内容: 您好,我注意到,这个简单的代码无法正常工作…… 该测试已在localhost上运行,我的意思是:我加载页面,关闭本地Web服务器,然后触发请求(通过一个简单的按钮,其中onclick指向此功能)。错误永远不会被调用,我得到的是调用成功处理程序,它具有textStatus =“ success”和data = null。我什至注意到请求在10秒之前就超时了。在Firefox(最新版本),
对于某些活动的意图是有效的,对于某些特定的活动意图是崩溃的,我已经改变并尝试了不同的方法,但是对于某些活动意图是无效的,应用程序正在构建,但是在手机上运行之后,它在调试期间没有显示出任何错误?我尝试了不同的方法,但它仍然崩溃,谁能帮助我解决它? MainActivity java 清单文件
问题内容: 我在Express中有一个SSL服务器,该服务器不能在所有浏览器上运行(除非用户手动信任该网站),因为某些浏览器需要链证书(我们有自己的中间证书)。我已经将中间证书和连锁证书放在一个.crt文件中。链+中间证书在变量中。它似乎不起作用。我正在使用http://www.digicert.com/help并正在进行检查,但是它似乎没有返回中间+链证书。 这是我的设置方法: 在Firefox
每当我的代码出错时。。我在浏览器上看到的只是一个空白的白页。没有错误。没有什么 所以这里有另一个问题要处理...我仍然没有显示错误。我只想展示一些有意义的错误...我还能尝试什么? *更新* 我按照上面错误消息中的建议遵循了此指南。我得到了非常积极的回应; 因此,我再次尝试运行。我得到了这样的回应; 很好,对吗?但是,当加载脚本时,我仍然会看到一个空白的白色页面,其中有一个错误。为什么?