• Как поставить на паузу очередь RabbitMQ?

    @pasutavitaliy
    :)
    Привет. Тебе не нужно ставить на паузу очередь) Это не верно архитектурно.
    Если тебе нужно обработать данные и дальше отправить уже обработанные данные, то тебе нужно еще одну очередь.
    Например одна очередь augmenter, которая слушает все сообщения, обрабатывает и пушит дальше в другую очередь.
    И вторая, например, persister, которая слушает по другому ключу другую очередь (augementer) и делает с этими данными что то там еще (например сохраняет в базу данных).

    В итоге:
    - у тебя слабая связаность между этими логическими модулями
    - если упадет одна из очередей, вторая сможет и дальше обрабатывать существующие сообщения
    Ответ написан
    Комментировать
  • Как лучше организовать тестирование nodejs typecript приложения?

    @pasutavitaliy
    :)
    Привет.
    Структура. В моем текущем проекте мы эксперементировали и с папкой 'test' отдельно для тестов, и с файлами тестов в одной папке с исходниками. И командой пришли к выводу, что для нас второй вариант выглядит лучше. Так как у нас микросеврисная архитектура, то сами приложения маленькие и нет необходимости создавать отдельные папки для одного - двух файлов (например models, controllers etc).

    707938d10dd74cdf85ba6e4a3265d70c.png

    Если у вас монолитное приложение с кучей файлов и папок, то я бы выбрал вариант с папкой `test`.
    Инструменты для тестирования: mocha (фрейморк для тестирования), chai (ассерт либа), sinon (для spies, stubs, mocks), istambul (для code coverage).
    Ответ написан
    3 комментария
  • Node.js как замена PHP?

    @pasutavitaliy
    :)
    Учи эту вкусняшку
    hardcore only, not for chicks =)
    Ответ написан
    Комментировать
  • Как правильно использовать роутинг в связке Express + Angular?

    @pasutavitaliy
    :)
    Скорее всего, если вы используете роутинг от ангуляра, то ваш експресс должен работать как апи и он не должен ничего отрисововать.

    Что то типа такого на клиенте
    .state('login', {
      cache: false,
      url: '/login',
      templateUrl: 'templates/auth/login.html'
    });
    ---------
    .controller('loginCtrl', function ($scope, Request, $state) {
    
            $scope.login = function (operator) {
                Request.sendRequest('Your/path/to/express/api/current/method', obj).then(
                    function resolve(resp) {
                       // handle success answer, call function to render some partial of html etc.
    
                    },
                    function reject(resp) {
                      //  handle error
                    }
                );
    })


    а ваш експресс, работающий по принципу апи, будет отдавать только данные, все отрисовки будет делать ангуляр,
    все работы с шаблонами и т.д.
    Ответ написан
    Комментировать
  • Как в real-time показывать добавлений комментарий?

    @pasutavitaliy
    :)
    Глобально в вашем случае - нет разницы между выводом комментрия к посту всем кто на странице и выводом сообщения в чате всем кто в нем сейчас состоит. Поэтому примеры с чатами вполне подойдут.
    А логика примерно следущаяя:
    1) На сервере создать сокет сервер, который будет слушать по некому урлу:порту
    var express = require('express');
    var app = express();
    var io = require('socket.io')(http);
     http = require('http').Server(app);
     http.listen(yourPort, yourUrl, function () {
            console.log('App listening at http://%s:%s', yourUrl, yourPort);
            io.on('connection', function(socket){...}

    2) На клиенте подключится к этому урлу:порту
    socket = io.connect(yourUrl:yourPort, {secure: true, forceNew: true});

    3) На клиенте слушать некое событие из сервера. Например назовем его onCommentAdd
    socket.on('onCommentAdd', function(msg) {
            yourFuncToAddCommentInHTMLDOM(msg)
     });


    Где на месте msg будет вся необходимая информация с сервера о комментарии

    4) На сервере когда вы выполнили сохранение в базу комментария вызовите emit метод екземпляра вашего io c нужными параметрами. Примерно так
    Socket.emit('onCommentAdd', {author: "Vova", date: "1454576067", "text": "Azazazaza lalka" });


    В принципе это все, если всё сделаете правильно, то на клиенте получите новый коммент.
    Надеюсь, это поможет
    Ответ написан
    1 комментарий
  • Как работать с cookie в nodejs?

    @pasutavitaliy
    :)
    app.post('/', function (req, res) { ... }
    это значит, что вы (скорее всего) используете express.
    Если да, то воспользуйтесь этой либой cookie-parser

    Как у меня в index.js

    var cookieParser = require('cookie-parser');
    ...
    app.use(cookieParser());


    а дальше в контроллере что то типа такого у вас будет

    app.post('/', function(req, res) {
      console.log("Cookies: ", req.cookies)
    })
    Ответ написан
    Комментировать