• Как в Node.js отдавать статику без Express.js?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Вообще это не очень эффективно. Однажды по молодости поленился настроить nginx на раздачу статики и отдавал ее нодой, причем не самописным костылем, а сделанным уважаемыми людьми пакетом. Проц и память были заняты где-то на 30%, после перехода на nginx стало по 10%.
    Ответ написан
    Комментировать
  • Как в Node.js отдавать статику без Express.js?

    @hufawoso
    Как-то так:
    // Встроенный модуль http поддерживает функциональность HTTP-сервера и HTTP-клиента
    var http = require('http');
    // Встроенный модуль fs поддерживает функциональность файловой системы
    var fs = require('fs');
    // Встроенный модуль path поддерживает функциональность, связанную с путями файловой системы
    var path = require('path');
    // Дополнительный модуль mime поддерживает порождение MIME-типов на основе расширения имен файлов
    var mime = require('mime');
    // Объект cache реализует хранение содержимого кэшированных файлов
    var cache = {};
    
    var server = http.createServer(function(request, response) {
        var filePath = false;
        if (request.url == '/') {
    // Определение HTML-файла, обслуживаемого по умолчанию
            filePath = 'public/index.html';
        } else {
    // Преобразование URL-адреса в относительный путь к файлу
            filePath = 'public' + request.url;
        }
        var absPath = './' + filePath;
    // Обслуживание статического файла
        serveStatic(response, cache, absPath);
    });
    
    server.listen(3000, function() {
        console.log("Server listening on port 3000.");
    });
    
    
    function send404(response) {
        response.writeHead(404, {'Content-Type': 'text/plain'});
        response.write('Error 404: resource not found.');
        response.end();
    }
    
    function sendFile(response, filePath, fileContents) {
        response.writeHead(
            200,
            {"content-type": mime.lookup(path.basename(filePath))}
        );
        response.end(fileContents);
    }
    
    function serveStatic(response, cache, absPath) {
    // Проверка факта кэширования файла в памяти
        if (cache[absPath]) {
    // Обслуживание файла, находящегося в памяти
            sendFile(response, absPath, cache[absPath]);
        } else {
    // Проверка факта существования файла
            fs.exists(absPath, function(exists) {
                if (exists) {
    // Считывание файла с диска
                    fs.readFile(absPath, function(err, data) {
                        if (err) {
                            send404(response);
                        } else {
                            cache[absPath] = data;
    // Обслуживание файла, считанного с диска
                            sendFile(response, absPath, data);
                        }
                    });
                } else {
    // Отсылка HTTP-ответа 404
                    send404(response);
                }
            });
        }
    }
    Ответ написан
    5 комментариев
  • Не работают стили и js на html странице возвращенной с node.js сервера. Что делать?

    @dthpth
    Погромист
    если файлы скриптов и стилей лежат рядом с index.html, то какой сервер их должен возвращать?
    написанный вами сервер способен обрабатывать только один URL: 127.0.0.1:3000 и возвращать только один ответ - содержимое файла '../index.html'
    научите его обрабатывать запрос 127.0.0.1:3000/my_script.js и возвращать содержимое js файла - и скрипт будет подключаться и выполняться.
    Ответ написан
    1 комментарий
  • Не работают стили и js на html странице возвращенной с node.js сервера. Что делать?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Есть похожий вопрос на тостере: Как в Node.js отдавать статику без Express.js?

    Также Вы можете вместо модуля http использовать более высокоуровневый фреймворк Express.

    установка
    простейший web сервер
    раздача статических файлов

    пример Express приложения раздающего статику
    var express = require('express');
    var app = express();
    var port = 3000;
    
    // тут надо отметить что роутеры в Express выполняются последовательно 
    // и каждый из них имеет возможность прекратить дальнейшую обработку запроса последующими роутерами. 
    // express.static в случае нахождения запрашиваемого файла так и поступит.
    
    // любой запрос к http://вашдомен_или_IP/public будет восприниматься как запрос статики
    app.use('/public', express.static(__dirname + '/public'));
    
    // любой запрос будет восприниматься как запрос статики.
    app.use(express.static(__dirname + '/public'));
    
    
    app.use((err, request, response, next) => {
        // логирование ошибки, пока просто console.log
        console.log(err)
        response.status(500).send(‘Something broke!’)
    })
    
    app.listen(port, function () {
      console.log('Example app listening on port '+port+'!');
    });


    Ответ написан
    3 комментария
  • Переполнение носителя (HDD) в VirtualBox

    @Man1aca1
    Итак, для увеличения размера виртуального диска нам необходимо сделать следующее. Открываем командную строку (Win-R – cmd – OK) и переходим в директорию в которую у нас установлен VirtualBox (если вы не меняли путь, предлагаемый при установке, то это будет папка C:\Program Files\Oracle\Virtual Box). Теперь получим информацию о нужном нам виртуальном диске VDisk.vdi командой:

    VboxManage.exe showhdinfo C:\VMDISK\VDisk.vdi

    (в этой команде предполагается, что путь к нашим виртуальным дискам C:\VMDISK а нужный нам диск называется VDisk.vdi)

    В результатах выводимых командой есть строка Logical size в которой указан максимальный размер диска. Теперь попробуем увеличить размер диска, к примеру, до 40 Гб (40960 Мб) командой:

    VboxManage.exe modifyhd C:\VMDISK\VDisk.vdi −−resize 40960

    Еще раз выведем информацию о диске командой:

    VboxManage.exe showhdinfo C:\VMDISK\VDisk.vdi

    И убедимся что строка Logical size показывает новое значение максимально размера диска.

    После увеличения максимального размера виртуального диска указанными выше командами нам необходимо зайти в гостевую систему и средствами гостевой операционной системы увеличить размер логического диска.
    Ответ написан
    2 комментария
  • React.js Не обновляется содержимое на сайте при добавлении элемента в массив. Почему?

    dasha_programmist
    @dasha_programmist
    ex Software Engineer at Reddit TS/React/GraphQL/Go
    потому что ты добавляешь в массив users, который не является свойством внутри state. Соответственно у тебя state не меняется, поэтому реакт не обновляет компонент, нужно изменить state.
    this.state.people.push() // пушить сюда
    Ответ написан
    7 комментариев