Ответы пользователя по тегу Node.js
  • Почему не завершается процесс?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    По существу вашего вопроса:

    Как вы думаете, если на телефоне вы набрали номер, а с той стороны была поднята трубка, то когда завершиться звонок?

    если еще не догадались

    звонок завершиться не раньше чем вы или тот кому вы звоните повесит трубку. Поэтому погуглите
    redis client.quit

    и
    redis client.end

    ну или почитайте тут

    ну и напоследок напомню, что иногда полезно читать документацию https://www.npmjs.com/package/redis
    Ответ написан
    2 комментария
  • Как изменить сообщение отправленное телеграм ботом?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    bot.on('message', async (msg) => {
      const text = msg.text.toLowerCase()
      const chatId = msg.chat.id
      const message = 'TEXT'
      if (text.match('123')) {
         setTimeout(() => {
            bot.sendMessage(chatId, message)
            .then(msgData=>{
              let count = 0;
              const timerId = setInterval(() => {
                  count+=Math.floor(Math.random()*10);
                  if(count>100){
                    count=100;
                    clearInterval(timerId);
                  }
                  bot.editMessageText(`${message} (edit) ${count}%`, 
                  {
                    chat_id: msgData.chat.id,
                    message_id: msgData.message_id
                  });
              }, 500)
            })
         }, 500)
      }
    })
    Ответ написан
  • Почему после читки файла, строки выводятся криво?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    в фале proxy.txt
    Moscow:
    
    91.243.188.184
    91.243.188.114
    91.243.188.30
    91.243.188.137
    
    SPB:
    
    109.120.128.178
    109.120.128.179
    109.120.128.180
    
    New IP Moscow:
    
    83.166.240.184
    83.166.241.9
    83.166.241.120
    
    
    port: 7951
    
    login/pas: In the account https://www.oplata.info/info/delivery.asp


    код парсера данного файла:
    const filedata = fs.readFileSync('proxy.txt', 'utf-8');
    
    const proxyData = filedata.split(/\s*?\n+\s*/).reduce(
      (acc, line)=>{	
        if( /\w+:$/.test(line)){
          acc.location = line;
        }else if( /port:\s*\d+/.test(line)){
          acc.port = line.replace(/\D+/g,'');
        }else if( /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/.test(line)){
          acc.list.push({
            ip: line,
            location: acc.location      	
          });
        }
        return acc;
      },
      {
        list:[],
        location: undefined,
        port: undefined
      }
    );
    
    const targetProxy = proxyData.list.map(item => item.ip + ':' + proxyData.port);
    
    console.log(targetProxy)
    
    // 91.243.188.184:7951
    // 91.243.188.114:7951
    // 91.243.188.30:7951
    // 91.243.188.137:7951
    // 109.120.128.178:7951
    // 109.120.128.179:7951
    // 109.120.128.180:7951
    // 83.166.240.184:7951
    // 83.166.241.9:7951
    // 83.166.241.120:7951


    тест на jsfiddle
    Ответ написан
    1 комментарий
  • Как читать документацию по node.js?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    на официальномй сайте, проматываю чуть ниже и вижу

    fs.writeFile(file, data[, options], callback)#
    History:
    • file <string> | <Buffer> | <URL> | <integer> filename or file descriptor
    • data
      <string> | <Buffer> | <TypedArray> | <DataView> | <Object>

    • options <Object> | <string>
      • encoding <string> | <null> Default: 'utf8'
      • mode <integer> Default: 0o666
      • flag <string> See support of file system flags. Default: 'w'.
      • signal <AbortSignal> allows aborting an in-progress writeFile

    • callback <Function>
      • err <Error> | <AggregateError>



    When file is a filename, asynchronously writes data to the file, replacing the file if it already exists. data can be a string or a buffer.

    When file is a file descriptor, the behavior is similar to calling fs.write() directly (which is recommended). See the notes below on using a file descriptor.

    The encoding option is ignored if data is a buffer.

    If data is a plain object, it must have an own (not inherited) toString function property.
    ...


    откуда следует что:
    первый параметр - это имя файла который нужно создать,
    второй параметр - это данные которые нужно записать,
    третий (необязательный) - это объект с опциями
    а четвертый (или третий если предыдущий параметр не был указан) - это коллбэк

    ЗЫ: уважаемый ТС, я понимаю что вопрос скорее всего был задан из-за вашей невнимательности, но тем не менее ответ вы получили, отметьте его решением)))

    Вот вам способ быстро найти информацию на странице:
    - открыв нужную страницу с большим объемом текста, перемотайте страницу в начала (до оглавления) и затем нажмите комбинацию кнопок CTRL+F (поиск по тексту страницы) и в появившемся окошке вбивайте искомый текст (в данном случае fs.write). После этого нужные пункты оглавления подсветятся желтым и вы легко найдете нужный.
    Ответ написан
    12 комментариев
  • Почему событие срабатывает несколько раз?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    у вас 2 косяка в коде.

    Первый вы поняли сами, каждый раз при коннекте вы запускаете новый слушатель события "end", и даже если событие возникнит 1 раз, а слушатели стоят как once то все равно сработает каждый из уже запущенных, но еще ни разу не сработавших слушателей.

    Второй косяк - это то что вы не завершаете запущенный setInterval, который каждую секунду продолжает уменьшать таймер, даже после того как таймер станет меньше нуля. В результате, когда таймер достигает нуля у вас начинает срабатывать условие if(this.timer <= 0) на каждый тик
    Ответ написан
    4 комментария
  • Какой пакет npm использовать для бота?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    https://www.npmjs.com/package/puppeteer
    если же сайт достаточно простой, не SPA или подобное, не тянет кучу данных которые рендерит на клиенте то можно и с помощью https://www.npmjs.com/package/node-fetch
    Ответ написан
  • Ошибка типа: Cannot read property 'src' of null?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    вот эта строка
    const url = await page.$("div.post-container picture img");


    не находит элемента, удовлетворяющего div.post-container picture img
    и возвращает значение null. В результате url = null
    Ответ написан
    4 комментария
  • Как сделать переменную из Socket.io доступной везде?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    если доступной нужно сделать переменную (не значение переменной) то так
    var sharedData;
    socket.on('Название события', data => {
      sharedData = data
    })


    Но подозреваю что вам нужно сделать доступной не саму переменную а полученное внутри обработчика значение data?

    Если вам нужен именно второй вариант, то ответ НИКАК))))

    НО:

    1. вы можете сделать видимость ее доступности:
    (async () => {
      async function getData(){
        const promise = new Promise(function(resolve, reject) {
          socket.on('Название события', data => {
            resolve(data);
          });
        });
        return promise;
      }
      var sharedData = await getData();
    
      // тут в sharedData будет доступно значение из data
    
    })();


    2. или же вы можете в нужных местах (в нескольких) ловить событие 'Название события', и при его получении обрабатывать data.

    3. есть и другие варианты, все они связанны с асинхронностью, и так или иначе позволяют правильно и своевременно обработать data поступившую посредством события 'Название события'
    Ответ написан
  • Как прервать запрос в mongoose?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    // мой chatId (я админ)
    const myId = 1396346856;
    // chatId собеседника
    let currentInterlocutorId;
    
    bot.on('message', msg => {
        //chatId который пишет боту
        const chatId = msg.chat.id
    
        // если сообщение от меня (хозяина бота)
        if (chatId === myId) {
            // не будем мучать БД при каждом моем сообщении поэтому сначала проверим, похоже ли то что я написал на ID пользователя
            if (/^\d+$/.test(msg.text)) {
    
                /*если сообщение которое я ввел равно chatId пользователя из базы данных, то следующие сообщения будут отправляться этому пользователю*/
                Person
                    .findOne({ chat: msg.text })
                    .then(person => {
                        currentInterlocutorId = msg.text;
                        bot.sendMessage(mayId, 'Соединение установлено')
                    })
                    .catch()
            }
    
            // если я (хозяина бота) ввел "stop" общение прекращаем
            if (msg.text === "stop") {
                bot.sendMessage(mayId, 'Соединение разорвано');
                bot.sendMessage(currentInterlocutorId, 'Я от тебя устал, не пиши мне больше!!!');
                currentInterlocutorId = undefined;
            }
    
        }
    
        // если собеседник был выбран
        if (currentInterlocutorId) {
            // если пишу я
            if (chatId === myId) {
                bot.sendMessage(currentInterlocutorId, msg.text)
            }
            // если выбранный собеседник пишет мне
            else if (chatId === currentInterlocutorId) {
                bot.sendMessage(mayId, msg.text)
            }
    
        }
    
    
    })
    Ответ написан
    1 комментарий
  • Можно ли создать GIF из GIF + PNG/JPG на Node.JS?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    для этих целей есть консольные программы и соответствующий npm модуль для них

    сами проги:
    www.graphicsmagick.org
    https://imagemagick.org/index.php

    npm модуль
    https://www.npmjs.com/package/gm
    Ответ написан
    Комментировать
  • Как отправить данные из бекенда на фронтенд?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    есть два основных способа:
    1. запросить данные с фронта по http с помощью XMLHttpRequest или Fetch. Для этого способа необходимо иметь на сервере ендпоинт, умеющий формировать и отправлять данные на соответствующий ему запрос.
    2. отправить данные по желанию сервера по заранее установленному клиентом websocket соединению. Для этого способа существует множество различных подходов, например:
    - самый простой (но не лучший). На клиенте стоит слушатель приходящих по ws собщений, который их парсит и определяет что же с ними делать дальше
    - более сложный в реализации. Шина событий, которую организовываете сами (или с использованием сторонних библиотек) (может быть организована и на ws и даже на http) В этом случае вы на сервере (или на клиенте) вызываете событие ws.emit("имя события", данные) а на противоположной стороне ловите это событие ws.on(ws.emit("имя события", (данные)=>{ тут обрабатываете полученные данные}).
    - более сложный в реализации. Та же шина событий, но с возможностью создания чегото типа каналов, на которые можно подписывать определенные группы клиентов)
    Ответ написан
    2 комментария
  • На что ссылается node.js при показе ошибки запуска сервера?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    TypeError: Cannot read property '0' of null
    в данном случае говорит о том что не может прочесть свойство '0' у null

    то есть
    StringPrototypeMatch(importStatement, /{.*}/) вместо массива (или возможно вместо объекта или даже строки) выдает вам null

    в самом простом случае вам нужно добавить проверку на на наличие нужного типа данных. например так
    const match =  StringPrototypeMatch(importStatement, /{.*}/);
    if( !match ) {
       return; // сопоставлений не найдено, дальшейшие действия не имеют смысла
    }
    const namedImports = match[0];
    Ответ написан
    1 комментарий
  • Как сделать простой доступ к сайту?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Комментировать
  • Как сделать валидацию данных mongodb?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Для этих целей можно использовать JsonSchema

    вот пример использования для валидации https://www.newtonsoft.com/json/help/html/JsonSche...
    Ответ написан
    Комментировать
  • Как исправить ошибку при подключении библиотеки в node js npm?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Установите python а затем попробуйте еще раз

    ЗЫ: иногда очень полезно читать то, что выводится в консоль, особенно, если там написано что надо делать, чтобы исправить ошибку.
    5f2c93e8811fb705169945.png
    Ответ написан
    2 комментария
  • Как перегнать буфер в строку?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    если кодировка строки, лежащей в буфере UTF-8 или UTF-16 то
    так Buffer.toString
    или так String decoder

    есликонсоль не поддерживает utf то для вывода можно использовать Buffer.transcode
    Ответ написан
  • Как сохранить файл отправленный в сообщении?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Как то так:
    const fs = require("fs");
    const Discord = require("discord.js");
    const client = new Discord.Client();
    
    client.login("ТУТ ВАШ ТОКЕН");
    
    ...
    
    // обработчик события message
    client.on('message', async message => {
    
        const filename = Date.now()+".json";
        const data = {
            content: message.content,
            attachments: message.attachments.map(attach=>{
                return {
                    id: attach.id,
                    url: attach.url,
                    proxyURL: attach.proxyURL,
                    filename: attach.filename,
                    filesize: attach.filesize,
                    height: attach.height,
                    width: attach.width
                };
            })
        };
    
        // не забудьте создать папочку logs в папке с ботом
        fs.writeFile('./logs/'+filename, JSON.stringify(data), (err) => {
            if (err) throw err;
        });
    });


    ну и вот пример того что бот будет записывать в папку logs (это лог с вашим сообщением моему боту :)
    {
      "content":"Тест",
      "attachments":[
        {
          "id":"686193341083549696",
          "url":"https://cdn.discordapp.com/attachments/452202521671237653/686193341083549696/IMG-30dd366b26acb4b1cbbe786f3ad22862-V.jpg",
          "proxyURL":"https://media.discordapp.net/attachments/452202521671237653/686193341083549696/IMG-30dd366b26acb4b1cbbe786f3ad22862-V.jpg",
          "filename":"IMG-30dd366b26acb4b1cbbe786f3ad22862-V.jpg",
          "filesize":58121,
          "height":330,
          "width":374
        }
      ]
    }


    каждое вложение содержит 2 ссылки (обычный url и proxyurl):

    url https://cdn.discordapp.com/attachments/45220252167...

    proxyurl https://media.discordapp.net/attachments/452202521...
    Ответ написан
    Комментировать
  • Nodejs http-socks5proxy туннель?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    если речь идет именно о http (не https) запросах, то можно
    https://www.npmjs.com/package/shadowsocks-lite
    https://www.npmjs.com/package/http-proxy-to-socks
    Ответ написан
  • Где найти нормальный форум сделанный на nodejs?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Ответ написан
    Комментировать
  • Как передать объект с сервера node.js?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Учите английский, в сообщении об ошибке все написано:
    The first argument must be one of type string ...


    Что можно перевести примерно так:
    Первый аргумент может быть только строкой.

    Таким образом чтобы передать JSON его надо преобразовать к строковому представлению:
    ws.send( JSON.stringify({'connected':25,"room":1000}));
    Ответ написан
    3 комментария