Code4Life

Как правильно получить последний файл из директории NodeJS

При реализации ExpressJS роута который отдает последний созданный файл в директории встал вопрос, а как правильно это сделать?

Главная ошибка, которую можно совершить — физически читать файлы в директории.

// Подключим библиотеку для работы с файловой системой
var fs = require('fs');
// Функция readdir возвращает список файлов в директории;
fs.readdir('./dir', function (err, list) {
             let maxTime;
             let fileName;
             list.forEach(function (file) {
             // Функция statSync возвращает информацию о файле, 
            // где mtime - нужное нам время его создания;
                 stats = fs.statSync('./dir' + "/" + file);
                 if (maxTime) {
                     if (stats.mtime > maxTime) {
                         fileName = file;
                         maxTime = stats.mtime;
                     }
                 }
                 else {
                     fileName = file;
                     maxTime = stats.mtime;
                 }
             });
             if (fileName) {
                 // fileName искомое название файла
             }
         })
2017   file   js   last file   node   nodeJS   файл

Как добавить несколько продуктов в корзину woocommerce за один раз

Поможет следующий хук (functions.php); Необходимо добавить следующий код:

function woocommerce_maybe_add_multiple_products_to_cart($url = false)
{
    // Make sure WC is installed, and add-to-cart qauery arg exists, and contains at least one comma.
    if (!class_exists('WC_Form_Handler') || empty($_REQUEST['add-to-cart']) || false === strpos($_REQUEST['add-to-cart'], ',')) {
        return;
    }

    // Remove WooCommerce's hook, as it's useless (doesn't handle multiple products).
    remove_action('wp_loaded', array('WC_Form_Handler', 'add_to_cart_action'), 20);

    $product_ids = explode(',', $_REQUEST['add-to-cart']);
    $count = count($product_ids);
    $number = 0;

    foreach ($product_ids as $product_id) {
        if (++$number === $count) {
            // Ok, final item, let's send it back to woocommerce's add_to_cart_action method for handling.
            $_REQUEST['add-to-cart'] = $product_id;

            return WC_Form_Handler::add_to_cart_action($url);
        }

        $product_id = apply_filters('woocommerce_add_to_cart_product_id', absint($product_id));
        $was_added_to_cart = false;
        $adding_to_cart = wc_get_product($product_id);

        if (!$adding_to_cart) {
            continue;
        }

        $add_to_cart_handler = apply_filters('woocommerce_add_to_cart_handler', $adding_to_cart->get_type(), $adding_to_cart);

        // Variable product handling
        if ('variable' === $add_to_cart_handler) {
            woo_hack_invoke_private_method('WC_Form_Handler', 'add_to_cart_handler_variable', $product_id);

            // Grouped Products
        } elseif ('grouped' === $add_to_cart_handler) {
            woo_hack_invoke_private_method('WC_Form_Handler', 'add_to_cart_handler_grouped', $product_id);

            // Custom Handler
        } elseif (has_action('woocommerce_add_to_cart_handler_' . $add_to_cart_handler)) {
            do_action('woocommerce_add_to_cart_handler_' . $add_to_cart_handler, $url);

            // Simple Products
        } else {
            woo_hack_invoke_private_method('WC_Form_Handler', 'add_to_cart_handler_simple', $product_id);
        }
    }
}

// Fire before the WC_Form_Handler::add_to_cart_action callback.
add_action('wp_loaded', 'woocommerce_maybe_add_multiple_products_to_cart', 15);


function woo_hack_invoke_private_method($class_name, $methodName)
{
    if (version_compare(phpversion(), '5.3', '<')) {
        throw new Exception('PHP version does not support ReflectionClass::setAccessible()', __LINE__);
    }

    $args = func_get_args();
    unset($args[0], $args[1]);
    $reflection = new ReflectionClass($class_name);
    $method = $reflection->getMethod($methodName);
    $method->setAccessible(true);

    $args = array_merge(array($class_name), $args);
    return call_user_func_array(array($method, 'invoke'), $args);
}

После чего начинают работать ссылки вида ./?add-to-cart=31,32

Надеюсь это поможет вам так же как и мне.

Код взят с сайта

Установка nodejs на orangepi Ubuntu 16.04 через PPA

Подключаемся к платке через ssh или открываем терминал если вы подключили к платке монитор с сопутствующей переферией.

Устанавливаем нужный нам PPA

curl -sL https://deb.nodesource.com/setup_7.x -o nodesource_setup.sh

где 7 версия nodejs
Запускаем скрипт

bash nodesource_setup.sh

Устанавливаем nodejs из пакетов

apt-get install nodejs

Для работы некоторых пакетов может потребоваться пакет build-essential

apt-get install build-essential

Для проверки работоспособности достаточно проверить версию

node -v
2017   node   orangepi   ppa
Ctrl + ↓ Ранее