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)
? Непонимаю разницу. |
Цитата:
Цитата:
app.use((err, req, res, next) => {
//Этот миддлвер будет обрабатывать ошибки.
});
Цитата:
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);
|
А для логирования есть morgan.
|
Цитата:
В конец, это куда? После каждого app.get() или нужно проследить порядок подключения через require и поставить именно в конец объявления всего приложения? |
Цитата:
let app = express();
app.get("/adimn/articles", (req, res) => {
res.render("admin/articles");
});
app.get("/admin/gallery", (req, res) => {
res.render("admin/gallery");
});
? На скорость это как-то влияет или просто для построения архитектурных решений? |
Цитата:
Цитата:
Цитата:
|
Цитата:
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) => {
//Этот миддлвер будет обрабатывать ошибки.
});
|
Чтобы подключился после всех остальных миддлеверов:
global.app = express();
require('get.js');
require('post.js')
app.use((err, req, res, next) => {
//Этот миддлвер будет обрабатывать ошибки.
});
app.listen(3000);
Почему - потому что запрос идет по цепочке миддлверов как по потокам, и если поставить логгер в начале, до него попросту никогда ничего не дойдет. |
Erolast,
Спасибо, теперь понял. :) |
Только глобал ж в ноде не принято использовать. Почему не так:
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);
|
Цитата:
Если маленький проект подключаем так?
let app = express();
app.use(require("./get/info"));
app.use(require("./get/props"));
app.listen(3000);
Где:
./get/info
let app = express();
app.get('/get/info/', funcHandler);
А если большой?
let app = express();
app.use(require("./get/init"));
app.listen(3000);
Где:
./get/init
require('./info');
require('./props');
...
Где ./get/info
app.get('/get/info/', funcHandler);
Так? |
А в ноде не без разницы let или var? Вроде же и так по модулям распихано.
|
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
Цитата:
let app = express();
app.use("/", require("./routers/main"));
app.use("/api", require("./routers/api"));
app.listen(3000);
//routers/main.js
let express = require("express");
let router = express.Router();
router.use("/*", (req, res) => {
res.render("main");
});
module.exports = router;
//routers/api.js
let express = require("express");
let httpStatuses = require("statuses");
let Article = require("../models/Article");
let router = express.Router();
router.route("/articles")
.get((req, res, err) => {
Article.find().then(
(articles) => res.json(articles),
(err) => next(err)
);
})
.post((req, res, err) => {
let article = new Article();
article.save().then((article) => {
res.status(httpStatuses.Created);
res.location(req.protocol +
"://" +
req.hostname +
(config.get("port") != 80 ? ":" + config.get("port") : "") +
req.originalUrl +
article.id
);
res.json(article);
}, (err) => next(err));
});
module.exports = router;
Когда роутер разрастается - он просто заменяется на папочку и разбивается на несколько мелких (именно поэтому я не указываю расширение при импорте). |
Я немного по другому делю:
/get //-> читаем с сервера (в папке есть файл init в который подключаем файлы) /set //-> пишем на сервер (в папке есть файл init в который подключаем файлы) Т.к. я в основном использую тип JSON, то деление на get и post становиться немного неудобным, а то ещё присрется put ввести, хотя похоже мне он будет без надобности. Мне было неясно зачем нужен let router = express.Router();. Теперь вижу, внутри ты делишь на get и post, если такого деление нет, то он без надобности и можно сразу писать app.get или app.post |
Цитата:
Цитата:
|
Цитата:
Ты написал роутер, внутри get, post. А я делю на get и set. Абстрагируюсь от типа(set: post, put, delete). Цитата:
|
Цитата:
|
тут у вас кто-то предлагал для записи логов ошибок использовать morgan, но это
Цитата:
Одним из способов, вероятно, можно вставить логгирование в тот же error handler callback экспресса, который первым аргументом принимает ошибку. |
Цитата:
fs async write to end file и подумать о том, когда создавать новый лог файл. |
| Часовой пояс GMT +3, время: 14:00. |