Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.04.2015, 09:46
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Express error handler (перенаправить в логи)
Первое.
Как в express 4 сохранять ошибки в логфайл и запретить отдавать в браузер? Буду благодарен за пример.

По умолчанию express шлет описание ошибки в браузер, что недопустимо на продакшене.

И второе.
Есть router http://expressjs.com/4x/api.html#router
var app = express();
var router = app.Router([options]);;
router.get('/events', funct)


Чем это отличается от:
var app = express();
app.get('/events', funct)

?

Непонимаю разницу.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #2 (permalink)  
Старый 28.04.2015, 11:52
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
По умолчанию express шлет описание ошибки в браузер, что недопустимо на продакшене.
Не будет слать при process.env.NODE_ENV == "production" (либо можно вручную установить через app.set("env", mode))

Цитата:
Как в express 4 сохранять ошибки в логфайл
Установи в конец миддлвер с аргументами err, req, res, next (то есть, с четырмя)
app.use((err, req, res, next) => {
  //Этот миддлвер будет обрабатывать ошибки.
});


Цитата:
router
Роутер позволяет делать вложенный роутинг:
let app = express();

let adminRouter = express.Router();

adminRouter.get("/articles", (req, res) => {
    res.render("admin/articles");
});

adminRouter.get("/gallery", (req, res) => {
    res.render("admin/gallery");
});

app.use("/admin", adminRouter);

Последний раз редактировалось Erolast, 28.04.2015 в 12:00.
Ответить с цитированием
  #3 (permalink)  
Старый 28.04.2015, 12:00
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

А для логирования есть morgan.
Ответить с цитированием
  #4 (permalink)  
Старый 28.04.2015, 12:16
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Сообщение от Erolast
Установи в конец
У меня приложение разбросано по множеству папок и в них есть app.get, app.post ...

В конец, это куда?

После каждого app.get() или нужно проследить порядок подключения через require и поставить именно в конец объявления всего приложения?
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.

Последний раз редактировалось Gozar, 28.04.2015 в 12:22.
Ответить с цитированием
  #5 (permalink)  
Старый 28.04.2015, 12:20
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Сообщение от Erolast
Pоутер позволяет
то, есть можно тоже самое написать:

let app = express();

app.get("/adimn/articles", (req, res) => {
    res.render("admin/articles");
});

app.get("/admin/gallery", (req, res) => {
    res.render("admin/gallery");
});

?

На скорость это как-то влияет или просто для построения архитектурных решений?
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #6 (permalink)  
Старый 28.04.2015, 13:47
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
нужно проследить порядок подключения через require и поставить именно в конец объявления всего приложения?
Порядок подключения через use. Чтобы до логгера через next() дошла любая ошибка из любого миддлевера.

Цитата:
то, есть можно тоже самое написать:
Да.

Цитата:
На скорость это как-то влияет?
Эм... каким образом? Вроде да, просто для удобства.
Ответить с цитированием
  #7 (permalink)  
Старый 28.04.2015, 13:59
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Сообщение от Erolast
Порядок подключения через use. Чтобы до логгера через next() дошла любая ошибка из любого миддлевера.
Есть три файл:

init.js
global.app = express();
require('get.js');
require('post.js');


get.js
app.get('/get/:id', funcHandlerPost);


post.js
app.post('/get/:id', funcHandlerPost);


Куда поставить?
app.use((err, req, res, next) => {
  //Этот миддлвер будет обрабатывать ошибки.
});
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #8 (permalink)  
Старый 28.04.2015, 14:48
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Чтобы подключился после всех остальных миддлеверов:
global.app = express();

require('get.js');
require('post.js')

app.use((err, req, res, next) => {
  //Этот миддлвер будет обрабатывать ошибки.
});

app.listen(3000);

Почему - потому что запрос идет по цепочке миддлверов как по потокам, и если поставить логгер в начале, до него попросту никогда ничего не дойдет.

Последний раз редактировалось Erolast, 28.04.2015 в 14:51.
Ответить с цитированием
  #9 (permalink)  
Старый 28.04.2015, 15:33
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Erolast,
Спасибо, теперь понял.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #10 (permalink)  
Старый 29.04.2015, 09:00
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Только глобал ж в ноде не принято использовать. Почему не так:
let app = express();

app.use(require("./get"));
app.use(require("./post"));

app.listen(3000);

?
Код более явным становится - не надо обшаривать весь проект, чтобы понять, чо там где происходит с приложением. К тому же, сторонние модули подключаются именно таким образом:

let morgan = require("morgan");
let app = express();

app.use(morgan());

app.listen(3000);
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка при вызове из консоли глобального модуля express в node.js в windows 8.1 jazznet AJAX и COMET 1 16.06.2015 10:30
Создать отдельное express app для роута AnZuev Node.JS 2 19.04.2015 14:57