Nodejs Express渲染布局:false,但仍然适用

时间:2018-10-12 09:37:19

标签: node.js express layout render ejs

我是nodejs的新手。我正在使用express和ejs。几个小时前,我看到安装express-ejs-layouts可以在我的项目中使用布局,该布局可以正常工作,但是现在我在尝试改进代码时,突然停止了其良好的功能。

当我发现它运行不正常时,我决定回到工作阶段,这不是很多代码。

app.js

var express = require('express');
var expressLayouts = require('express-ejs-layouts');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var cors = require('cors'); 

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

var app = express();

// 
app.set('views', path.join(__dirname, '/views'));
app.set('view engine', 'ejs');
//

app.use(logger('dev'));
app.use(cors()); 
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true })); 
app.use(cookieParser());

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

index.js:

//回到家

  router.get('/', function(req, res, next) {
      res.render('index', { user : req.cookies.UserData, token_id : req.cookies.token_id});
    console.log(cookies);
    });

// POST登录,这里我检查用户并创建令牌和用于测试的用户数据

router.post('/user/login',function(req,res,next){
  ////---here all code, it's a lot----///

    res.cookie('token_id', token);
    res.cookie('UserData', locals );
    res.redirect('/')
});

//获取登录布局错误

router.get('/user/login', function(req, res, next) {
      res.clearCookie('token_id');
      res.clearCookie('UserData');
      res.render('login',{layout : false});
    });

当进入localhost:3000 / user / login时,出现错误“布局未定义”。但是,我事先使用了对我有用的布局变量。

从布局中删除<%variable%>时,“ / user / login”工作正常,并且不使用布局。

_Head.ejs示例变量

<title><%= user.title %></title>

然后创建cookie以查看其工作原理,结果发现在运行cookie和再次设置布局变量的情况下,他继续告诉我“未定义用户变量”,而这段代码不是修改后,我正在改进的是Toaster,这是我淘汰的Toaster

我总是使用nodemon。

1 个答案:

答案 0 :(得分:0)

app.set('layout', 'layout.ejs');

在app.js中添加此行。

layout.ejs在您定义的情况下应位于views文件夹内

app.set('views', path.join(__dirname, '/views'));