Nodejs微博例子中, 我很奇怪我为什么都请求不到路径了。Failed to lookup view "login" 我是点击登录请求 view 竟然报错。 注册页是一样写的。都是可以的

Nodejs微博例子中, 我很奇怪我为什么都请求不到路径了。Failed to lookup view “login” 我是点击登录请求 view 竟然报错。 注册页是一样写的。都是可以的

Express 500 Error: Failed to lookup view “log” at Function.app.render (C:\Users\wd\microblog\node_modules\express\lib\application.js:493:17) at ServerResponse.res.render [as partial] (C:\Users\wd\microblog\node_modules\express\lib\response.js:753:7) at ServerResponse.module.exports.res.render (C:\Users\wd\microblog\node_modules\express-partials\index.js:55:9) at C:\Users\wd\microblog\routes\index.js:16:6 at callbacks (C:\Users\wd\microblog\node_modules\express\lib\router\index.js:161:37) at param (C:\Users\wd\microblog\node_modules\express\lib\router\index.js:135:11) at pass (C:\Users\wd\microblog\node_modules\express\lib\router\index.js:142:5) at Router._dispatch (C:\Users\wd\microblog\node_modules\express\lib\router\index.js:170:5) at Object.router (C:\Users\wd\microblog\node_modules\express\lib\router\index.js:33:10) at next (C:\Users\wd\microblog\node_modules\express\node_modules\connect\lib\proto.js:199:15)

/routes/index.js app.get(’/log’, function(req, res) { res.render(‘log’, { title: ‘用户登入’, }); });

app.post(’/log’, function(req, res) {

});

app.js

/**

  • Module dependencies. */ var express = require(‘express’) , routes = require(’./routes’) , user = require(’./routes/user’) , http = require(‘http’) , path = require(‘path’);

var flash = require(‘connect-flash’); var partials = require(‘express-partials’); var MongoStore = require(‘connect-mongo’)(express); var settings = require(’./settings’); var app = express();

var util = require(‘util’)

app.configure(function(){ app.set(‘port’, process.env.PORT || 3001);

//设置页面模板和引擎模板的位置 app.set(‘views’, __dirname + ‘/views’); //视图文件目录 app.set(‘view engine’, ‘ejs’); //视图模板引擎 app.use(partials()); //通过user启用中间件 app.use(express.favicon()); app.use(express.logger(‘dev’)); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.cookieParser()); //Cookie 解析中间件 app.use(flash()); app.use(express.session({ secret:settings.cookieSecret, store:new MongoStore({ //保存回话到数据库 db:settings.db }) }));

app.use(function(req,res,next){  
res.locals.user = req.session ? req.session.user:'';  
res.locals.keyword = req.session ? req.session.keyword:'';  

var err = req.flash(‘error’); if(err.length){ res.locals.error = err; }else{ res.locals.error = null; }

var success = req.flash('success');
if(success.length){
	res.locals.success =  req.flash('success');
}else{
	res.locals.success =  null;
}

next();

});

app.use(app.router); app.use(express.static(path.join(__dirname, ‘public’))); //表示提供了静态文件支持

});

app.configure(‘development’, function(){ app.use(express.errorHandler()); });

//定义动态视图工具 获取及时信息 //app.dynamicHelpers({ // //获取用户信息 // user:function(req,res){ // return user.session.user; // },error:function(req,res){ // // }, // success:function(req,res){ // var sucess = req.flash(‘success’); // if(success.length){ // return success; // }else // return null; // } // //});

routes(app);//这个是新加的 //routes/index.js 路由文件,用于组织展示内容 http.createServer(app).listen(app.get(‘port’), function(){ console.log("Express server listening on port " + app.get(‘port’)); });


4 回复

根据你提供的错误信息和代码片段,问题在于你的 Express 应用无法找到名为 log 的视图文件。这通常是因为视图文件的路径或名称配置不正确。以下是一个可能的解决方案,并提供一些示例代码来帮助你理解。

问题分析

  • 视图路径:Express 使用 app.set('views', ...) 设置视图文件的根目录。
  • 视图文件名app.render('log') 表示试图渲染一个名为 log.ejs 的文件(默认 .ejs 扩展名)。
  • 错误信息Failed to lookup view "log" 意味着 Express 在指定的视图路径下找不到 log.ejs 文件。

解决方案

1. 确保视图文件存在

确保在 views 目录下有一个名为 log.ejs 的文件。例如:

/views
    /log.ejs

2. 检查路由配置

确保路由配置正确地指向视图渲染。你可以将 /log 更改为 /login 以匹配视图文件名。

// routes/index.js
app.get('/login', function(req, res) {
    res.render('login', {
        title: '用户登入',
    });
});

app.post('/login', function(req, res) {
    // 处理登录逻辑
});

3. 确认视图引擎设置

确保在 app.js 中正确设置了视图引擎。

// app.js
app.set('views', __dirname + '/views'); // 视图文件目录
app.set('view engine', 'ejs'); // 视图模板引擎

示例代码

app.js

var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');

var flash = require('connect-flash');
var partials = require('express-partials');
var MongoStore = require('connect-mongo')(express);
var settings = require('./settings');
var app = express();

app.configure(function(){
    app.set('port', process.env.PORT || 3001);
    app.set('views', __dirname + '/views');
    app.set('view engine', 'ejs');
    app.use(partials());

    app.use(express.favicon());
    app.use(express.logger('dev'));
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(express.cookieParser());
    app.use(flash());

    app.use(express.session({
        secret: settings.cookieSecret,
        store: new MongoStore({
            db: settings.db
        })
    }));

    app.use(function(req, res, next) {
        res.locals.user = req.session ? req.session.user : '';
        res.locals.keyword = req.session ? req.session.keyword : '';

        var err = req.flash('error');
        if (err.length) {
            res.locals.error = err;
        } else {
            res.locals.error = null;
        }

        var success = req.flash('success');
        if (success.length) {
            res.locals.success = req.flash('success');
        } else {
            res.locals.success = null;
        }

        next();
    });

    app.use(app.router);
    app.use(express.static(path.join(__dirname, 'public')));
});

app.configure('development', function() {
    app.use(express.errorHandler());
});

routes(app);

http.createServer(app).listen(app.get('port'), function() {
    console.log("Express server listening on port " + app.get('port'));
});

routes/index.js

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

router.get('/login', function(req, res) {
    res.render('login', {
        title: '用户登入',
    });
});

router.post('/login', function(req, res) {
    // 处理登录逻辑
});

module.exports = router;

views/login.ejs

确保在 views 目录下有一个 login.ejs 文件。

<!DOCTYPE html>
<html>
<head>
    <title><%= title %></title>
</head>
<body>
    <h1><%= title %></h1>
    <!-- 登录表单 -->
</body>
</html>

通过以上步骤,你应该能够解决 Failed to lookup view "login" 的问题。


自己真SB, 忘记写视图了。

哈哈哈哈哈 我也犯这个毛病来的

根据你的描述,问题出在视图文件的查找上。错误信息 Failed to lookup view "login" 表明 Express 无法找到名为 login 的视图文件。通常这种情况是因为视图文件没有放在正确的目录下或者视图引擎未正确配置。

以下是一些可能的解决方案:

1. 检查视图文件位置

确保 login.ejs 文件位于 views 目录下。例如,views/login.ejs

2. 确认视图引擎配置

确认在 app.js 中已经设置了视图引擎:

app.set('views', __dirname + '/views'); // 设置视图文件目录
app.set('view engine', 'ejs'); // 设置视图模板引擎为 ejs

3. 路由配置

确保路由文件中请求的视图名称与实际文件名一致。例如,如果你请求 /login,那么路由应如下配置:

app.get('/login', function(req, res) {
    res.render('login', {
        title: '用户登入'
    });
});

示例代码

app.js

var express = require('express')
, routes = require('./routes')
, user = require('./routes/user')
, http = require('http')
, path = require('path');

var flash = require('connect-flash');
var partials = require('express-partials');
var MongoStore = require('connect-mongo')(express);
var settings = require('./settings');
var app = express();

app.configure(function(){
    app.set('port', process.env.PORT || 3001);
    app.set('views', __dirname + '/views'); // 设置视图文件目录
    app.set('view engine', 'ejs'); // 设置视图模板引擎为 ejs

    app.use(partials());
    app.use(express.favicon());
    app.use(express.logger('dev'));
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(express.cookieParser());
    app.use(flash());

    app.use(express.session({
        secret: settings.cookieSecret,
        store: new MongoStore({
            db: settings.db
        })
    }));

    app.use(function(req, res, next) {  
        res.locals.user = req.session ? req.session.user : '';
        res.locals.keyword = req.session ? req.session.keyword : '';

        var err = req.flash('error');
        if (err.length) {
            res.locals.error = err;
        } else {
            res.locals.error = null;
        }

        var success = req.flash('success');
        if (success.length) {
            res.locals.success = req.flash('success');
        } else {
            res.locals.success = null;
        }

        next();
    });

    app.use(app.router);
    app.use(express.static(path.join(__dirname, 'public')));
});

app.configure('development', function(){
    app.use(express.errorHandler());
});

http.createServer(app).listen(app.get('port'), function(){
    console.log("Express server listening on port " + app.get('port'));
});

routes/index.js

app.get('/login', function(req, res) {
    res.render('login', {
        title: '用户登入'
    });
});

views/login.ejs

<!DOCTYPE html>
<html>
<head>
    <title><%= title %></title>
</head>
<body>
    <h1>登录页面</h1>
    <!-- 登录表单 -->
</body>
</html>

确保这些文件都正确放置并配置好后,重启服务器并重新测试。希望这能解决你的问题。

回到顶部