Я развернул свое приложение node на Heroku и хочу включить сжатие Gzip, какие-нибудь советы?

avatar
manik singh
8 апреля 2018 в 10:54
457
1
1

Я пытался подключить код из: https://github.com/wimagguc/nodejs-static-http-with-gzip/blob/master/http-with-gzip.js Каталоги и файл Server.js Я внес изменения, добавив код:

path.exists(filePath, function(exists) {

    if (exists) {
        fs.readFile(filePath, function(error, content) {
            if (error) {
                response.writeHead(500);
                response.end();
            }
            else {
                var raw = fs.createReadStream(filePath);

                if (acceptEncoding.match(/\bdeflate\b/)) {
                    response.writeHead(200, { 'content-encoding': 'deflate' });
                    raw.pipe(zlib.createDeflate()).pipe(response);
                } else if (acceptEncoding.match(/\bgzip\b/)) {
                    response.writeHead(200, { 'content-encoding': 'gzip' });
                    raw.pipe(zlib.createGzip()).pipe(response);
                } else {
                    response.writeHead(200, {});
                    raw.pipe(response);
                }
            }
        });
    }
    else {
        response.writeHead(404);
        response.end();
    }

в server.js по адресу:

app.get('/', (req, res) => {
//this place
    res.render('home.hbs', {
    pageTitle: 'Home Page',
    welcomeMess: 'Welcome to my Site'
})

}); ошибка: path.exists не является функцией. но я не мог понять то же самое и сломал свое приложение.

я надеялся получить файл, заархивированный gzip. Я использую экспресс для работы с сервером

Источник
Moti Korets
8 апреля 2018 в 11:05
0

Пожалуйста, добавьте больше деталей, чтобы вам было легче помочь. Что вы пробовали? Каков был результат? Что вы ожидали?

Ответы (1)

avatar
Moti Korets
9 апреля 2018 в 06:10
0

Проблема в том, что код, который вы используете, основан на старых версиях узлов. path.exists был заменен на fs.exists. Ваш код может быть таким (с минимальными изменениями)

var fs = require("fs");
//...
path.exists(filePath, function(exists) {
    //...
}

Имейте в виду, что этот метод устарел, и вам следует искать альтернативы, используя либо fs.stat, либо fs.access, либо даже ifpackage-418<<9534path-exists2> вы не возражаете против внешней зависимости. В любом случае с fs.access это будет так

fs.access(filePath, (err) => {
  if (err) {
    response.writeHead(404);
    response.end();
  }else{
    // ... rest of the method (here you know file exists and accessible)
  }      
});

Разница в том, что ошибка в первом параметре обратного вызова.

manik singh
9 апреля 2018 в 07:18
0

Спасибо, я попробую это