Макет рендеринга в Nodejs Express: false, но он все еще работает - PullRequest
0 голосов
/ 12 октября 2018

Я новичок в nodejs.Я использую экспресс и ejs.Несколько часов назад я увидел, что при установке express-ejs-layout можно использовать макет в моем проекте, и это сработало, но теперь, когда я пытался улучшить свой код, он внезапно прекратил свою работу.

, когда яувидев, что это не работает, я решил вернуться к рабочему этапу, кода было немного.

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:

// Get Home

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

// POST логин, здесь я проверяю пользователя и создаю токен и userdata для теста

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('/')
});

// GET layout логин false

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

При переходе на локальный хост: 3000 / user / login, я получил ошибку «макет не определен».Но я использовал переменные макета, которые раньше работали без проблем.

при удалении <% variable%> из макета, "/ user / login" работает без проблем и не использует макет. *Образец переменной 1021 *

_Head.ejs

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

затем создайте куки, чтобы увидеть, как они работают, и получается, что с запущенными куки и переменными макета, установленными снова, он продолжает говорить мне, что«пользовательская переменная не определена», и этот код был не тем, который я изменил, а тем, что я улучшал, был Toaster, который я исключил

Я всегда использую nodemon.

1 Ответ

0 голосов
/ 12 октября 2018
app.set('layout', 'layout.ejs');

Добавить эту строку в app.js.

layout.ejs должен находиться внутри папки представлений в вашем случае, как вы определили

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