Задать вопрос
Ответы пользователя по тегу Node.js
  • Как работает $gt и $lt в mongo?

    syxme
    @syxme
    $gt = Больше чем // date > dateInTable
    $lt = Меньше чем // date < dateInTable

    $gte = Больше чем включительно // date >= dateInTable
    $lte = Меньше чем включительно // date <= dateInTable
    Ответ написан
    Комментировать
  • Как узнать о новых событиях?

    syxme
    @syxme
    Можно использовать классический long polling
    Принцип такой:
    В таблице где у тебя обновляются, добавляются данные должно быть поле что-то типо updateTime (время последнего обновления) Если запись создаётся то updateTime = createTime.

    Для реализации long polling нужно чтоб сервер не отправлял ответ пока не пройдет timeout(В среднем 5-15сек) или не появятся новые данные.

    Пример реализации на nodejs
    function subscribe(req,res,params,callback){
    	var timeStamp;
    	if (params.timestamp){  // Если передали timestamp c которого начинать выборку данных
    		timeStamp = new Date(parseInt(params.timestamp));
    	}else{
    		timeStamp = new Date();
    	}
    	var isConnected = true;
    	req.on('close', function() { // Если пользователь закрыл соединение
    		isConnected = false;
    	});
    	console.log("timeStamp",timeStamp);
    	(function startEvents(cb,time){
    
    		if (!isConnected){
    			console.log("Connection close_end pool");
    			return;
    		}
    		model.db.find({}).sort({updateTime :-1}).exec(function (err,items){ // SELECT * FROM datatable ORDER BY updateTime DESC
    			if (items.length>0){
    				cb(null,{
    					items:items,
    					timestamp:new Date(items[0].updateTime).getTime()  // Возвращаем время для следующего соединения
    				});
    			}else {
    				if (time > 10) {
    					cb(null, {
    						items:[],
    						timestamp:new Date().getTime()  // Возвращаем время для следующего соединения 
    					});
    				} else {
    					setTimeout(function (){
    						startEvents(rQuery, group, cb, time + 1);
    					},1000);
    				}
    			}
    		});
    
    	})(callback,0)
    }

    Первый запрос будет примерно такой: localhost:8080/controller/subscribe

    {items:[],timestamp:1634803048151} //  Если ничего не изменилось 
    {items:[1,2,3,4,5],timestamp:1634803048151} //  Если что-то изменилось

    Следующий запрос будет
    localhost:8080/controller/subscribe?timestamp=1634...
    И так до бесконечности
    Ответ написан
    Комментировать
  • Как использовать зависимость при рендере станицы handlebars?

    syxme
    @syxme
    Дело в том что вы пытаетесь связать функции серверной части с фронтом.
    const anime = require('animejs') будет доступен только в вашей программе (index.js)
    Вам нужно сделать примерно так:
    Для начала указать папку с статическими ресурсами
    app.use(express.static('public'));
    Переместить в папку public ваш скрипт animejs.js
    Добавить в loginform.hbs
    <head>
    <script src="/animejs.js" ></script>
    </head>
    Ответ написан