首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未能在视图目录中查找'/user/profile‘

未能在视图目录中查找'/user/profile‘
EN

Stack Overflow用户
提问于 2017-02-24 05:11:50
回答 1查看 1.7K关注 0票数 1

我正在尝试使用node.js、express.js和mongodb构建购物车。我正在建立注册功能。我的问题是,当我试图访问localhost:3000/user/profile链接时,会收到以下错误消息:

代码语言:javascript
复制
Failed to lookup view "/user/profile" in views directory 
    "/Users/vynguyen/shopping-cart/views

    Error: Failed to lookup view "/user/profile" in views directory "/Users/vynguyen/shopping-cart/views"
        at EventEmitter.render (/Users/vynguyen/shopping-cart/node_modules/express/lib/application.js:579:17)
        at ServerResponse.render (/Users/vynguyen/shopping-cart/node_modules/express/lib/response.js:960:7)
        at /Users/vynguyen/shopping-cart/routes/index.js:34:6
        at Layer.handle [as handle_request] (/Users/vynguyen/shopping-cart/node_modules/express/lib/router/layer.js:95:5)
        at next (/Users/vynguyen/shopping-cart/node_modules/express/lib/router/route.js:131:13)
        at Route.dispatch (/Users/vynguyen/shopping-cart/node_modules/express/lib/router/route.js:112:3)
        at Layer.handle [as handle_request] (/Users/vynguyen/shopping-cart/node_modules/express/lib/router/layer.js:95:5)
        at /Users/vynguyen/shopping-cart/node_modules/express/lib/router/index.js:277:22
        at Function.process_params (/Users/vynguyen/shopping-cart/node_modules/express/lib/router/index.js:330:12)
        at next (/Users/vynguyen/shopping-cart/node_modules/express/lib/router/index.js:271:10)
        at csrf (/Users/vynguyen/shopping-cart/node_modules/csurf/index.js:117:5)
        at Layer.handle [as handle_request] (/Users/vynguyen/shopping-cart/node_modules/express/lib/router/layer.js:95:5)
        at trim_prefix (/Users/vynguyen/shopping-cart/node_modules/express/lib/router/index.js:312:13)
        at /Users/vynguyen/shopping-cart/node_modules/express/lib/router/index.js:280:7
        at Function.process_params (/Users/vynguyen/shopping-cart/node_modules/express/lib/router/index.js:330:12)
        at next (/Users/vynguyen/shopping-cart/node_modules/express/lib/router/index.js:271:10

)

profile.hbs文件位于正确的文件夹中,但由于某种原因,服务器不会将其拔出。

以下是整个文件结构:在这里输入图像描述

这是我的index.js文件:

代码语言:javascript
复制
var express = require('express');
var router = express.Router();
var csrf = require('csurf');
var passport = require('passport');

var Product = require('../models/product');

var csrfProtection = csrf();
router.use(csrfProtection);

/* GET home page. */
router.get('/', function(req, res, next) {
    Product.find(function(err, docs) {
        var productChunks = [];
        var chunkSize = 3;
        for (var i = 0; i < docs.length; i += chunkSize) {
            productChunks.push(docs.slice(i, i + chunkSize));
        }
        res.render('shop/index', { title: 'Shopping Cart', products: productChunks });
    });
});

router.get('/user/signup', function(req, res, next) {
    res.render('user/signup', {csrfToken: req.csrfToken()});
});

router.post('/user/signup', passport.authenticate('local.signup', {
    successRedirect: '/user/profile',
    failureRedirect: '/user/signup',
    failureFlash: true
}));

router.get('/user/profile', function(req, res, next){
    res.render('/user/profile');
});

module.exports = router;

这是我的app.js:

代码语言:javascript
复制
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var expressHbs = require('express-handlebars');
var mongoose = require('mongoose');
var session = require('express-session');
var passport = require('passport');
var flash = require('connect-flash');

var routes = require('./routes/index');
var userRoutes = require('./routes/user');

var app = express();

mongoose.connect('localhost:27017/shopping');
require('./config/passport');

// view engine setup
app.set('views', __dirname+'/views');
app.engine('.hbs', expressHbs({defaultLayout: 'layout', extname: '.hbs'}));
app.set('view engine', '.hbs');

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(session({secret: 'mysupersecret', resave: false, saveUninitialized: false}));

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

app.use(flash());
app.use(passport.initialize());
app.use(passport.session());

app.use('/user', userRoutes);
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 handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-24 06:23:51

当视图文件路径被解析时,带有前导斜杠的视图路径将解析为根目录,因此出现错误。您需要解析相对于views目录的视图文件。在user/profile方法中使用./user/profile./user/profile将正确地解析视图文件。

正确代码:res.render('user/profile')res.render('./user/profile')

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42431228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档