Редирект на Nodejs
Использую Express. Вопрос: есть ссылка в .jade файле, по нажатию на ссылку не открываеться другой .jade файл. ПОЧЕМУ?
Вот код Jade (Pug): a(href='../file.jade', style='color: white;') Ссылка Вщт JS: exports.courses = function(req, res){ res.render('../file.jade', { title: 'Express' }); }; app.get('/', routes.index); app.get('../file.jade', routes.file); Не знаю что еще отправить, напишите что нужно для решения моей "проблемы" и я отправлю эту часть кода. Пожалуйста, помогите! |
Браузер не сможет тебе отрисовать твой jade файл. То есть должно быть что-то типо
a(href='/blabla', style='color: white;') Ссылка И должен быть middleware, который будет обрабатывать путь /blabla и рендерить твой file.jade с нужным контекстом app.get('/blabla', function(req, res){ res.render('path/to/file.jade') }) |
Не мидловер, а простой обработчик запроса (в данном случае).
Это я написал примерно же самое, но оказалось - что уже написано. Пришлось удалить. Короче, ссылка (href) - это обычный GET-запрос, которому нужен обычный обработчик. |
Цитата:
|
а относительный путь относительно какого файла писать?
|
АнонимныйПарень,
Вы указали путь к папке с шаблонами? Что-то типа app.set('views', './templates') Если да, то путь и указывается относительно папки templates. http://expressjs.com/ru/guide/using-...e-engines.html |
вот мои middleware:
/** * Module dependencies. */ var express = require('express'); var routes = require('./routes'); var http = require('http'); var path = require('path'); var app = express(); // all environments app.set('port', process.env.PORT || 3000); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.json()); app.use(express.urlencoded()); app.use(express.methodOverride()); app.use(app.router); app.use(express.static(path.join(__dirname, 'public'))); // development only if ('development' == app.get('env')) { app.use(express.errorHandler()); } app.get('/', routes.index); app.get('/courses', function(req, res){ res.render('courses.jade'); }) http.createServer(app).listen(app.get('port'), function(){ console.log('App is working on port ' + app.get('port')); }); |
Пишет Cannot GET /courses
|
Нет, это не синонимы.
Из любого обработчика можно сделать мидловер - добавив третий аргумент next. Это делают довольно часто, на самом деле. Например, таким способом оченно просто запретить "злому хаккеру" попасть на страницу, на которую должны попадать только заргистрированные юзеры. Просто пишешь первой строчкой в обработчике - if(!req.user) return next();- и запрос пройдёт дальше и закончится на хендлере Page not found. Так что, ну какие же это синонимы? Ну да ладно, мне всё равно. |
ответьте на мой вопрос выше
|
У вас путь к шаблонам прописан в папку views. Убедитесь, что эта папка существует в корне проекта и что ваш courses.jade лежит в этой папке.
|
А, ешкин кот. Вот это:
app.get('/', routes.index); app.get('/courses', function(req, res){ res.render('courses.jade'); }); Должно быть перед еррорХендлером. |
Спасибо, огромное! Ты настоящий друг!:) Помог!!! +99999999999 в карму!
|
Только смотри: если все мои файлы находятся в папке views, то все работает. Но если в папке views есть папка tabs (в ней file.jade) и файл index.jade, то как мне правильно поставить путь к file.jade?
Что писать тут: a(href='ЧТО ПИСАТЬ ТУТ?', style='color: white;') Ссылка Что писать тут: app.get('ЧТО ПИСАТЬ ТУТ?', function(req, res){ res.render('ЧТО ПИСАТЬ ТУТ?'); }); // development only if ('development' == app.get('env')) { app.use(express.errorHandler()); } |
Путь к шаблонам задан вот здесь -
app.set('views', path.join(__dirname, 'views'));- от этого места и отсчёт. Соответственно: res.render('tabs/file'); Что написано в строке запроса - не имеет значения. На клиенте написано href="/gfgfgfgfgfg" - на сервере то же самое - app.get('/gfgfgfgfgfg', ... Тут главное - придумывать что-нибудь разумное и соответствующее по смыслу, чтоб самому же и удобно было. Шаблоны можно делить на слои (layouts) и миксины (mixins). Поэтому обычно создают папку templates, а в ней папки layouts, mixins и views, путь указывают так - app.set('views', path.join(__dirname, 'templates/views'));- а уж отсюда подгружаются - типа extends ../layouts/defaultи т.д. - составные части каждой страницы. А при рендеринге расширение и не нужно - res.render('bla'); |
А, и все эти index тут не работают. Шаблонизатору до фени имя index, никакого приоритета оно не имеет. Какое имя написано в коде - res.render('blabla'); - тот файл и рендерится. Написано res.render('index') - будет index.jade
Ноде - не до фени: увидит в указанной папке файл index.js - будет его исполнять автоматически. |
Я кое-что попробовал и справил выше.
|
Cannot GET /tabs/courses
Вот что пишет! Не понимаю в чем ошибка |
Хе. Догадываюсь, что эта строчка написана в запросе, в аргументе тэга - href="/tabs/courses"
Но я не медиум, конечно. Если это так, то перечитайте внимательно мой предыдущий камент. В Ноде есть одна замечательная вещь (тут много замечательных вещей, но и эта тоже): pathname запроса не связан непосредственно с обработчиком этого запроса. С в строке запроса чего-то написано, но обработчику безразлично - чего там написано. Он просто прикручен к этому "чего-то" в качестве обработчика в этой вот строчке после запятой app.get('/hfhgjhlj/gfhf', ... ...);но ему всё равно, чего там написано. |
Часовой пояс GMT +3, время: 08:25. |