【问题标题】:How to render a template from a folder which does not contain express.static?如何从不包含 express.static 的文件夹中呈现模板?
【发布时间】:2017-07-04 03:49:07
【问题描述】:

我的 loginController 为

var User = require('./../models/User.js');

var loginController = {};

loginController.match = function(req, res){

    var username = req.body.username;
    var password = req.body.password;

    User.findOne({username : username, password : password})
    .then(function(user){
        if(user){
            res.render('profile',{
                title : 'Profile',
                user : user
            });
            /*return res.status(200).json({
                success : true,
                data : user
            });*/
        }
        else{
            return res.status(200).json({
                message : "Either username or password is wrong"
            });
        }
    })
    .catch(function(err){
        return res.status(500).json({
            message : err
        })
    });
}

module.exports = loginController;

它在我提交登录凭据后立即运行。如果在正确验证时我想渲染 profile.handlebars 并且我也能够渲染它,但我无法使用使用 express.static 和存在于我的 app.js 的单独文件中。

我的 app.js

var express = require('express');
var mongoose = require('mongoose');
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var session = require('express-session');
var hbs = require('express-handlebars');
var Path = require('path');

var routes = require('./routes.js');
var app = express();

/*View Engine*/
app.engine('handlebars',hbs({defaultLayout : 'layouts.handlebars', layoutsDir : __dirname + './../views/layouts'}));
app.set('views', Path.join(__dirname, './../views'));
app.set('view engine', 'handlebars');

/*Serve Static files*/
app.use(express.static(__dirname+'./../public'));

mongoose.connect('mongodb://localhost/tournament', function(){
    console.log('connected to tournament..');
});

/*Template Routes*/
/*Login*/
app.get('/', function(req,res,next){
    res.render('login',{
        title : 'Login'
    });
})
/*Profile
app.get('/profile',function(req,res,next){
    res.render('profile',options)
});
*/


app.use(bodyParser.urlencoded({
    extended: true
}));
app.use(bodyParser.json());
app.use(cookieParser());
app.use(session({secret : "asdasdvbvc234234sdfsdf23213123", resave : false, saveUninitialized : true}));
app.use('/api', routes);

module.exports = app;

我的个人资料.handlebars

<div class="row">
    <div class="col-md-12">
        <div class="float-right">
            Hello, {{user.username}}
            <button class="btn btn-md btn-danger">Logout</button>
        </div>
    </div>
</div>

【问题讨论】:

  • 浏览器中是否加载了css?您的 header.handlebars 中是否加载了 css?

标签: javascript express handlebars.js


【解决方案1】:

尝试将app.use(express.static(__dirname+'./../public')); 更改为app.use(express.static(Path.join(__dirname, './../public')));

【讨论】:

  • 您的目录树中没有任何可疑之处!!!像以前一样将layoutsDir : __dirname + './../views/layouts'更改为layoutsDir : Path.join(__dirname, './../views/layouts')
  • 也许你没有在 index.html 中正确引用你的 CSS
猜你喜欢
  • 2020-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 2012-02-27
  • 2011-07-29
  • 2017-05-10
相关资源
最近更新 更多