Показать сообщение отдельно
  #1 (permalink)  
Старый 29.01.2018, 16:54
Новичок на форуме
Отправить личное сообщение для titan83 Посмотреть профиль Найти все сообщения от titan83
 
Регистрация: 29.01.2018
Сообщений: 1

node.js + express + compression = непонятки
Коллеги, здравствуйте.
Я слегка новичек в мире js, поэтому не обессутьте...
В общем, делаю бэкэнд на ноде (до этого этот же бэк был мною написан на Qt/C++, там все работало правильно), принципиально все хорошо, но бэк отдает иногда довольно большие (единицы мегабайт) json'ы, и хотелось бы применять компрессию.
Ок. Читаю, делаю так:
const compression = require('compression');
const express = require('express');
const db = require('./app/db/db');
const app = express();
const port = 8000;

db.connect(function (err) {
    app.use(require('body-parser').urlencoded({extended: true}));
    app.use(compression());
    app.use((req, res, next) => {
        res.setHeader('Access-Control-Allow-Origin', '*');
        next();
    });
    console.log(err ? err.message : 'Connected to database');
    require('./app/routes')(app, db);
    app.listen(port, () => {
        console.log('Server started at port ' + port);
    });
});

Потом обрабатываю маршрут так:
app.get('/api/clients', (req, res) => {
        db.clientList(function (err, rowCount, result) {
            console.log(result);
            //res.setHeader('Content-Length', result.length);
            //res.setHeader('Content-Encoding', 'gzip');
            res.send(err ? {'error': err} : result);
        });
    });


В общем, работет компрессия не всегда (причем хидера Content-Encoding нет никогда), примерно в половине случаем у меня время загрузки 5 секунд, в другой половине 50-10 миллисекунд.
Куда копать?
Спасибо.
Ответить с цитированием