Nodejs初学,在学习MYBOLG的例子时,使用req.flash('error', '!')时,报错 Failed to lookup view 'error'
Nodejs初学,在学习MYBOLG的例子时,使用req.flash(‘error’, ‘!’)时,报错 Failed to lookup view ‘error’
//代码如下 router.post(’/reg’, function(req, res) { var name = req.query.name, password = req.body.password, password_re = req.body[‘password-repeat’];
//检验用户两次输入的密码是否一致
if (password_re != password) {
req.flash('error', '两次输入的密码不一致!');
return res.redirect('/reg');//返回主册页
}
错误日志:
Error: Failed to lookup view “error” in views directory “D:\WORK\node\mytest\vie ws” at Function.app.render (D:\WORK\node\mytest\node_modules\express\lib\applica tion.js:492:17) at ServerResponse.res.render (D:\WORK\node\mytest\node_modules\express\lib\r esponse.js:802:7) at Layer.module.exports [as handle] (D:\WORK\node\mytest\app.js:67:9) at trim_prefix (D:\WORK\node\mytest\node_modules\express\lib\router\index.js :235:17) at D:\WORK\node\mytest\node_modules\express\lib\router\index.js:208:9 at Function.proto.process_params (D:\WORK\node\mytest\node_modules\express\l ib\router\index.js:269:12) at IncomingMessage.next (D:\WORK\node\mytest\node_modules\express\lib\router \index.js:199:19) at fn (D:\WORK\node\mytest\node_modules\express\lib\response.js:797:25) at Function.app.render (D:\WORK\node\mytest\node_modules\express\lib\applica tion.js:494:14) at ServerResponse.res.render (D:\WORK\node\mytest\node_modules\express\lib\r esponse.js:802:7)
app.js如下 var fs = require(‘fs’); var accessLog = fs.createWriteStream(‘access.log’, {flags: ‘a’}); var errorLog = fs.createWriteStream(‘error.log’, {flags: ‘a’});
var express = require(‘express’); var path = require(‘path’); var favicon = require(‘static-favicon’); var logger = require(‘morgan’); var cookieParser = require(‘cookie-parser’); var bodyParser = require(‘body-parser’);
var routes = require(’./routes/index’);
var session = require(‘express-session’);
var MongoStore = require(‘connect-mongo’)(session); var settings = require(’./settings’);
var flash = require(‘connect-flash’); var app = express();
// view engine setup app.set(‘views’, path.join(__dirname, ‘views’)); app.set(‘view engine’, ‘ejs’); app.use(flash());
app.use(favicon()); app.use(logger(‘dev’)); app.use(bodyParser.json()); app.use(bodyParser.urlencoded()); app.use(cookieParser()); app.use(express.static(path.join(__dirname, ‘public’)));
//app.use(’/’, routes);
routes(app);
app.use(session({ secret:settings.cookieSecret, key:settings.db, saveUninitialized: true, resave: true, cookie:{maxAge:100060602430}, store:new MongoStore({db:settings.db}) })); /// catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error(‘Not Found’); err.status = 404; next(err); });
/// error handlers
// development error handler // will print stacktrace if (app.get(‘env’) === ‘development’) { app.use(function(err, req, res, next) { res.status(err.status || 500); res.render(‘error’, { message: err.message, error: err }); }); }
// production error handler // no stacktraces leaked to user app.use(function(err, req, res, next) { res.status(err.status || 500); res.render(‘error’, { message: err.message, error: {} }); });
module.exports = app;
Nodejs初学,在学习MYBOLG的例子时,使用req.flash('error', '!')
时,报错 Failed to lookup view 'error'
问题描述
在使用 req.flash('error', '两次输入的密码不一致!')
时,出现了以下错误:
Error: Failed to lookup view "error" in views directory "D:\WORK\node\mytest\views"
这意味着Express无法找到名为 error
的视图文件。
示例代码
router.js
const express = require('express');
const router = express.Router();
router.post('/reg', function(req, res) {
var name = req.query.name,
password = req.body.password,
password_re = req.body['password-repeat'];
// 检验用户两次输入的密码是否一致
if (password_re !== password) {
req.flash('error', '两次输入的密码不一致!');
return res.redirect('/reg'); // 返回注册页
}
// 其他逻辑
});
module.exports = router;
app.js
var express = require('express');
var path = require('path');
var favicon = require('static-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
var routes = require('./routes/index');
var flash = require('connect-flash');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(favicon());
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(flash());
app.use(session({
secret: settings.cookieSecret,
key: settings.db,
saveUninitialized: true,
resave: true,
cookie: { maxAge: 1000 * 60 * 60 * 24 * 30 },
store: new MongoStore({ db: settings.db })
}));
app.use('/', routes);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});
}
// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
module.exports = app;
解决方法
-
创建
error.ejs
文件: 在views
目录下创建一个名为error.ejs
的文件。此文件用于渲染错误信息。<!-- views/error.ejs --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Error</title> </head> <body> <h1><%= message %></h1> </body> </html>
-
确保正确配置视图引擎: 确保在
app.js
中设置了正确的视图引擎(如EJS)。
通过以上步骤,您可以解决 Failed to lookup view 'error'
错误,并确保在出现错误时能够正确渲染错误页面。
有哪位前辈知道的,麻烦告诉下
有人知道为什么吗?来个热心人告诉我下吧
教程太旧了。
你可以把你的错误日志发出来。
看你的描述视乎是说找不到 error 这张页面。
的确像你说的那样,是找不到ERROR这个VIEW,但FLASH这个模块根本不需要用到这个VIEW啊,错误就发生在req.flash()这句 错误日志: Error: Failed to lookup view “error” in views directory "D:\WORK\node\mytest\vie ws" at Function.app.render (D:\WORK\node\mytest\node_modules\express\lib\applica tion.js:492:17) at ServerResponse.res.render (D:\WORK\node\mytest\node_modules\express\lib\r esponse.js:802:7) at Layer.module.exports [as handle] (D:\WORK\node\mytest\app.js:67:9) at trim_prefix (D:\WORK\node\mytest\node_modules\express\lib\router\index.js :235:17) at D:\WORK\node\mytest\node_modules\express\lib\router\index.js:208:9 at Function.proto.process_params (D:\WORK\node\mytest\node_modules\express\l ib\router\index.js:269:12) at IncomingMessage.next (D:\WORK\node\mytest\node_modules\express\lib\router \index.js:199:19) at fn (D:\WORK\node\mytest\node_modules\express\lib\response.js:797:25) at Function.app.render (D:\WORK\node\mytest\node_modules\express\lib\applica tion.js:494:14) at ServerResponse.res.render (D:\WORK\node\mytest\node_modules\express\lib\r esponse.js:802:7)
看了新教程,使用EXPRESS最新版,还是报这个错误
myblog这个例子,如此调用,是不会报这个错误的,但我用的是EXPRESS4.X,我怀疑是我哪个地方的配置有问题
当然有问题了,这个例子是3.0版本的,可以这样使用: app.use(function(req, res, next){
var error=req.flash('error');
var success=req.flash('success');
res.locals.user = req.session.user;
console.log("user");
res.locals.error = error.length?error:null;
res.locals.success = success.length?success:null;
next();
});
我也出现过这种情况。 你app.js里面配置的app.set(‘view engine’, ‘html’); 或者 app.set(‘view engine’, ‘ejs’); 与views/error的后缀一样吗
当你在使用 req.flash('error', '!')
时遇到 Failed to lookup view 'error'
错误,通常是因为你的应用尝试渲染一个名为 error
的视图文件,但找不到该文件。你可以通过以下步骤来解决这个问题:
- 创建
error.ejs
视图文件:确保在views
目录下有一个名为error.ejs
的文件。如果该文件不存在,创建它,并添加一些基本的 HTML 结构。
<!-- views/error.ejs -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Error</title>
</head>
<body>
<h1><%= message %></h1>
</body>
</html>
- 检查错误处理中间件:确保错误处理中间件能够正确地渲染
error.ejs
文件。你的app.js
中已经有这样的处理逻辑:
// development error handler
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});
}
// production error handler
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
- 确保正确的闪现消息使用:确保你在控制器中正确地使用了
req.flash
方法。你的代码片段看起来是正确的,但需要确保connect-flash
插件已经正确安装并配置。
router.post('/reg', function(req, res) {
var name = req.body.name,
password = req.body.password,
password_re = req.body['password-repeat'];
if (password_re != password) {
req.flash('error', '两次输入的密码不一致!');
return res.redirect('/reg');
}
});
确保你的代码中使用的 req.body
数据字段与表单提交的数据字段匹配。