Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Редирект на Nodejs (https://javascript.ru/forum/node-js-io-js/69803-redirekt-na-nodejs.html)

АнонимныйПарень 18.07.2017 22:07

Редирект на 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);


Не знаю что еще отправить, напишите что нужно для решения моей "проблемы" и я отправлю эту часть кода. Пожалуйста, помогите!

destus 19.07.2017 11:45

Браузер не сможет тебе отрисовать твой jade файл. То есть должно быть что-то типо
a(href='/blabla', style='color: white;') Ссылка

И должен быть middleware, который будет обрабатывать путь /blabla и рендерить твой file.jade с нужным контекстом
app.get('/blabla', function(req, res){
res.render('path/to/file.jade')
})

Audaxviator 19.07.2017 11:53

Не мидловер, а простой обработчик запроса (в данном случае).
Это я написал примерно же самое, но оказалось - что уже написано. Пришлось удалить.
Короче, ссылка (href) - это обычный GET-запрос, которому нужен обычный обработчик.

destus 19.07.2017 12:18

Цитата:

Сообщение от Audaxviator (Сообщение 458991)
Не мидловер, а простой обработчик запроса (в данном случае).

Вы не поверите, но это синонимы.

АнонимныйПарень 19.07.2017 12:25

а относительный путь относительно какого файла писать?

destus 19.07.2017 12:31

АнонимныйПарень,
Вы указали путь к папке с шаблонами? Что-то типа
app.set('views', './templates')

Если да, то путь и указывается относительно папки templates. http://expressjs.com/ru/guide/using-...e-engines.html

АнонимныйПарень 19.07.2017 12:34

вот мои 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'));
});

АнонимныйПарень 19.07.2017 12:35

Пишет Cannot GET /courses

Audaxviator 19.07.2017 13:04

Нет, это не синонимы.
Из любого обработчика можно сделать мидловер - добавив третий аргумент next.
Это делают довольно часто, на самом деле. Например, таким способом оченно просто запретить "злому хаккеру" попасть на страницу, на которую должны попадать только заргистрированные юзеры. Просто пишешь первой строчкой в обработчике -
if(!req.user) return next();
- и запрос пройдёт дальше и закончится на хендлере Page not found.
Так что, ну какие же это синонимы?
Ну да ладно, мне всё равно.

АнонимныйПарень 19.07.2017 13:16

ответьте на мой вопрос выше


Часовой пояс GMT +3, время: 01:53.