Ответы пользователя по тегу Node.js
  • Как в inversify JS без typescript на ES6 получить уже созданный инстанс объекта?

    YarkoDzech
    @YarkoDzech Автор вопроса
    будучи трезвым, сдержи все свои пьяные обещания!
    Разобрался
    container.bind(TYPES.Ninja).to(Ninja).inSingletonScope()
    Ответ написан
    Комментировать
  • Есть ли в Koa2 ограничение на размер свойства ctx.body?

    YarkoDzech
    @YarkoDzech Автор вопроса
    будучи трезвым, сдержи все свои пьяные обещания!
    Проблема решилась когда из проекта убрали koa-compress, самой проблемы не разбирали ибо и так в этом компрессе толку мало.
    Ответ написан
    Комментировать
  • Как обеспечить доступ к Redis только с определенных ip?

    YarkoDzech
    @YarkoDzech Автор вопроса
    будучи трезвым, сдержи все свои пьяные обещания!
    С какой-то там версии 3.2.х bind нескольких ip в конфиге не позволяет стартануть серверу.

    Поэтому вариант такой:

    1. В /redis.conf меняем
    bind 0.0.0.0 //открываем доступ к базе из вне
    *опционально меням порт против типо этого zmap -p6379 -o omg.txt
    очень рекомендовано прописать:
    requirepass nl6Cq8mthJrrXbqlDqLaPgtFkeq12zqB7Sb5j5UJ
    ну и очень рекомендовано отключить управление конфигом с командной строки:
    rename-command CONFIG ""

    После рестарта сервера, он по ip и порту должен смотреть наружу:
    redis-cli -h ваш_ip -p ваш_порт

    2. Прописываем правила для iptables
    Важно! Все правила идут в строгом порядке, поэтому желательно обнулить все правила, перезаписать файл с листом начисто. И пройтись заново и в том месте, где открываются порты 80, для SSH и ряд других прописать:

    iptables -A INPUT -p tcp -s y.y.y.y --dport хххх -j ACCEPT доступ с y.y.y.y ip на такой то порт

    повторяем правило для ip всех микросервисов что будут стучаться к redis
    открываем локальный интерфейс:

    iptables -A INPUT -i lo -j ACCEPT

    последним блокируем всё что не описано правилами и открываем исходящие пакеты:

    После этого можно заблокировать все остальное и разрешить все исходящие соединения.

    iptables -P OUTPUT ACCEPT
    iptables -P INPUT DROP

    После перезагрузки iptables и если всё правильно настроено порт должен быть только для нужных нам ip. А если следовать всем инструкциям, то даже если пакет и пролетит фаервол, он упрется в авторизацию и не сможет с командной строки сгенерировать ключ доступа к серверу.

    P.S Если всё пошло не так, обнуляется iptables так:
    iptables -F
    Ответ написан
    Комментировать
  • Как получить данные с get запроса от клиента(Ajax), на сервере?

    YarkoDzech
    @YarkoDzech
    будучи трезвым, сдержи все свои пьяные обещания!
    По результатам переписки.
    Код который я даю не предназначен для использования! Это просто пример нативного ajax и асинхрона от nodejs. Вообще, нужно придерживаться хотябы rest и если что то летит на сервер, то обязательно с формы и post/put запросом. Get только для получения данных с сервера.
    И реквесты в ноде так не обрабатывают.
    И респонс, если прилетела кирилица, отправит назад отработку.
    Всё что написано ниже чисто для понимания сути.

    var simplePage = '<h1>тестовая отправка данных без формы</h1>'+
    '<hr><input type="text" id="txt">'+
    '<input type="button" id="button" value="отправить что-то">'+
    '<script>(function(){'+
    'var button = document.getElementById("button");'+
    'button.onclick = function(){var xhr = new XMLHttpRequest();'+
    'xhr.open("GET","/toserver/"+document.getElementById("txt").value, true);xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");'+
    'xhr.send();'+
    'xhr.onreadystatechange = function(){if(xhr.readyState == 4) alert(xhr.responseText)}}'+
    '})()</script>';
    var http = require('http');
    var server = http.createServer(function(req,res){
    	console.log(req.url);
    	if (req.url === '/') {
    		res.writeHead(200, {'Content-type' : 'text/html; charset=utf-8'});
    		res.write(simplePage);
    		res.end();
    	}
    	else{
    		res.writeHead(200, {'Content-type' : 'text/html; charset=utf-8'});
    		//res.write(simplePage);
    		res.end('вы отправили нам '+req.url.slice(10));
    	}
    });	
    server.listen(1333,function(){console.log('listen server at 1333')});
    Ответ написан
    2 комментария
  • Как правильно обновить данные в MongoDB?

    YarkoDzech
    @YarkoDzech
    будучи трезвым, сдержи все свои пьяные обещания!
    $push просто добавляет данные в массив
    $addToSet добавляет с заменой

    tag = ['four', 'five']
    db.collection.update({searchtags: "anything"}, {$push: {tag: ['one', 'two', 'three', 'four']}})
    tag = ['one', 'two', 'three', 'four', 'four', 'five']

    db.collection.update({searchtags: "anything"}, {$addToSet: {tag: ['one', 'two', 'three', 'four']}})
    tag = ['one', 'two', 'three', 'four', 'five']

    Через точку можно пушить прямо в подмасив массива.
    Ответ написан
    2 комментария