• Как заложить полный развал своего проекта, удаление, поломку, остановку?

    lastuniverse
    @lastuniverse
    xmoonlight, к тому же всегда можно укпзать что выдана для тестирования именно демоверсия
  • Как заложить полный развал своего проекта, удаление, поломку, остановку?

    lastuniverse
    @lastuniverse
    xmoonlight, очень трудно доказать что одно из специально подобранных простых чисел в рандомаезере, умышленно подобрано таким образом, чтобы критически сократить период повторяемости генерируемых значений)))
  • Как заложить полный развал своего проекта, удаление, поломку, остановку?

    lastuniverse
    @lastuniverse
    xmoonlight, я тут ниже более вредный вариантик предложил, зацените идею))))
  • Как заложить полный развал своего проекта, удаление, поломку, остановку?

    lastuniverse
    @lastuniverse
    Nodejs при делении на 0 дает не exception а infinity (в последней верси точно, за более ранние не скажу)
  • Как сделать вдавленную кнопку?

    lastuniverse
    @lastuniverse
    а мне так нравится больше ))))
  • Как правильно учить Javascript?

    lastuniverse
    @lastuniverse
    Превосходно сформулировано, плюсую.
  • Как перегнать буфер в строку?

    lastuniverse
    @lastuniverse
    Глеб Лукашонок, если есть телеграм, заходите туда (найдете меня в https://telegram.me/ChatCombats) у меня сейчас как раз пол часика времени есть
  • Почему не выводит ничего?

    lastuniverse
    @lastuniverse
    учите ассинхонность js
    в weather.js
    module.exports = {
        getWeather: function (url) {
            return fetch(url)
                .then((resp) => {
                    return resp.json();
                })
        }
    };


    в mainRoutes.js
    .get((req, res) => {
      weather.getWeather( "https://api.openweathermap.org/data/2.5/weather?q=London&appid={тут ключ}" )
        .then(data=>res.send(data));
    })
  • Как отрендерит JSON объекта полученный по API?

    lastuniverse
    @lastuniverse
    feniksdv, не путайте автора, разве имеет хоть какое то значение в контексте вопроса то как именно он получил JSON с данными??? Это риторический вопрос, и правильный ответ "Нет, не имеет" так что повторюсь, не путайте автора.
  • Как перегнать буфер в строку?

    lastuniverse
    @lastuniverse
    Глеб Лукашонок, мне бы удаленный доступ к БД, чтобы я сам мог скрипт подергать, но кто же в здравом уме и трезвой памяти даст такой доступ к боевой БД)))
  • Как перегнать буфер в строку?

    lastuniverse
    @lastuniverse
    Глеб Лукашонок,
    возник ещё вопрос. Всё работает с БД на 3 пользователя. А когда пустил скрипт по "боевой" базе на 1800 пользователей - просто ничего не происходит xD жду по 5 минут, 0 вывода в консоль. :(


    Тут не подскажу, но 1800 пользователей - это не о чем, даже с учетом декодирования все должно проскочить за доли секунды. Но все же попробуйте перед декодированием сделать вывод в консоль не декодированных данных, вдруг там случаются элементы массива не объекты а null или undefined
  • Как перегнать буфер в строку?

    lastuniverse
    @lastuniverse
    Глеб Лукашонок, на самом деле, помимо USERNAME могут быть и другие поля в БД содержащие текст (в том числе и русский), А поэтому, чтобы не писать для каждой переменной расшифровку буфера, можно сделать так.

    // расшифровывает поля из списка fields если они присутствуют в объекте data
    // data - либо объект с полями, либо массив таких объектов
    // fields - список полей (ключей) содержимое которых надо декодировать
    function fbDecode(data, fields){
       if (Array.isArray(data)) {
          // если массив, то декодируем его элементы
          return data.map(d=>fbDecode(d, fields);
       }else if ( typeof data)) {
          // если объект, то делаем его копию и в ней декодируем те его свойства, которые есть в fields
          return Object.keys(data).reduce((a,k)=>{
               if (fields.includes(k)) {
                  a[k] = iconv.decode(data[k]);
               }else{
                  a[k] = data[k];
               }
               return a;
          },{});
       } else {
           // во всех остальных случаях просто возвращаем то что в data
           return data;
       }
    }
    
    Firebird.attach(options, function(err, db) {
        if (err)
            throw err;
        // далее ЛЮБОЙ ВАШ ЗАПРОС В БД, РЕЗУЛЬТАТОМ КОТОРОГО БУДЕТ ОБЪЕКТ С ДАННЫМИ ТРЕБУЮЩИМИ ДЕКОДИРОВАНИЯ ИЛИ МАССИВ ТАКИХ ОБЪЕКТОВ
        // например для запроса SELECT USERNAME FROM USERS в result будет массив с объектами вида
        // [
        //    {USERNAME: <буфер с данными>},
        //    {USERNAME: <буфер с данными>},
        //    и т.д.
        // ]
        // и декодировать нужно как-то так var res = fbDecode(results, ['USERNAME'] ) в результате чего в res получим что то типа
         // [
        //    {USERNAME: 'testuser1'},
        //    {USERNAME: 'пользователь'},
        //    и т.д.
        // ]
        //
        // а для запроса SELECT ID, USERNAME, INFO FROM USERS в result будет массив с объектами вида (это для примера, в вашей таблице USERS может и не быть полей ID и INFO)
        // [
        //    {ID: 12345, USERNAME: <буфер с данными>,  INFO: <буфер с данными>},
        //    {ID: 67890, USERNAME: <буфер с данными>,  INFO: <буфер с данными>},
        //    и т.д.
        // ]
        // и декодировать нужно как-то так var res = fbDecode(results, ['USERNAME', 'INFO'] ) в результате чего в res получим что то типа
         // [
        //    {USERNAME: 'testuser1', INFO: 'bla-bla-bla'},
        //    {USERNAME: 'пользователь', INFO: 'это Вася, он баран)))'},
        //    и т.д.
        // ]
        // соответсвенно, к декодированным данным можно будет обращаться так:
        // res[0].USERNAME // testuser1
        // res[1].INFO           // это Вася, он баран)))
        // ну или как у вас через цикл
        //   for (let user of res) {
        //        console.log(user.ID, user.USERNAME, user.INFO);
        //  }
    
        db.query('SELECT USERNAME FROM USERS', function(err, results) {
            const res = fbDecode(results, ['USERNAME'] )
            for (let user of res) {
                console.log(user.USERNAME);
            }
            db.detach();
    
        });
    });
  • Как перегнать буфер в строку?

    lastuniverse
    @lastuniverse
    Глеб Лукашонок, сори, набивал на телефоне, накосячил с запятыми и ;

    Firebird.attach(options, function(err, db) {
    
        if (err)
            throw err;
    
        db.query('SELECT USERNAME FROM USERS', function(err, result) {
            const res = result.map(buf=>{
                return {
                     buf: buf.USERNAME,
                     text: iconv.decode(buf.USERNAME, "win1251")
                };
            });
            console.log(res);
            db.detach();
    
        });
    });
  • Как перегнать буфер в строку?

    lastuniverse
    @lastuniverse
    Глеб Лукашонок, и вот еще мысль, попробуйте для всех текстовых данных от fb делать преобразование
    Firebird.attach(options, function(err, db) {
    
        if (err)
            throw err;
    
        db.query('SELECT USERNAME FROM USERS', function(err, result) {
            const res = result.map(buf=>{
                return {
                     buf: buf.USERNAME
                     text: iconv.decode(buf.USERNAME, "win1251");
                };
            });
            console.log(res);
            db.detach();
    
        });
    });


    Если будет корректно работать для русского и английского текста, то это решит ваши проблемы с получением данных.
  • Как перегнать буфер в строку?

    lastuniverse
    @lastuniverse
    Глеб Лукашонок, и вот еще мысль - странно что вы данные из БД аолучаете в виде буфера. Каким модулем пользуетесь для этого? Нет ли у него настроек или альтернатив решающих проблему?
  • Как перегнать буфер в строку?

    lastuniverse
    @lastuniverse
    Глеб Лукашонок, гонять через питон тоже не лучший вариант, хотябы потому, что использование 2х ЯП усложнит развертку приложения. Лучше просто в ноде на момент получения данных из БД делать нужные проверки и преобразования
  • Как перегнать буфер в строку?

    lastuniverse
    @lastuniverse
    Глеб Лукашонок, нет смысла гонять данные из одной бд в другую.
  • Как перегнать буфер в строку?

    lastuniverse
    @lastuniverse
    Глеб Лукашонок, странно, ведь utf8 поддерживает все языки, включая и русский. В вашем случае надо определять кодировку в момент получения данных из бд и приводить к utf. Как вариант, можно попробовать в самой БД заменить русские имена пользователей на их utf8 варианты, но тут могут возникнуть проблемы если планируется дальнейшее совместное использование СКУД и вашей вебки.
  • Как перегнать буфер в строку?

    lastuniverse
    @lastuniverse
    Глеб Лукашонок, так, разобрался, все еще хуже чем я думал))))

    первый пользователь у вас в кодировке win1251, остальные в utf8.

    вот пример декодирования и вывода (требует установки iconv-lite)
    iconv = require('iconv-lite');
    
    const temp = [
        {codemap: "win1251", data: [0xcf, 0xee, 0xeb, 0xfc, 0xe7, 0xee, 0xe2, 0xe0, 0xf2, 0xe5, 0xeb, 0xfc] },
        {codemap: "utf8", data: [0x74, 0x65, 0x73, 0x74] },
        {codemap: "utf8", data: [0x74, 0x65, 0x73, 0x74, 0x33] }
    ];
    
    function test(a){
        let buf = Buffer.from(a.data);
    
        if(a.codemap != "utf8"){
            console.log(iconv.decode(buf, a.codemap) );
        }else{
            console.log(buf.toString());
        }
    }
    
    temp.forEach(a=>{
       test(a);
    });
    
    // на выходе:
    // Пользователь
    // test
    // test3


    Настоятельно рекомендую привести все используемые данные в кодировку utf8, если же данные из внешних источников, то контролируйте кодировку и приводите ее к utf8 на стадии получения данных. Если данные вы получаете аяксом, то укажите в заголовке запроса что хотите получать данные в utf8/.
  • Как перегнать буфер в строку?

    lastuniverse
    @lastuniverse
    Глеб Лукашонок, ловите

    const temp = [
        {codemap: "ascii", data: [0xcf, 0xee, 0xeb, 0xfc, 0xe7, 0xee, 0xe2, 0xe0, 0xf2, 0xe5, 0xeb, 0xfc] },
        {codemap: "utf8", data: [0x74, 0x65, 0x73, 0x74] },
        {codemap: "utf8", data: [0x74, 0x65, 0x73, 0x74, 0x33] }
    ];
    
    function test(a){
        const buf = Buffer.from(a.data);
        console.log(buf.toString(a.codemap));
    }
    
    temp.forEach(a=>{
       test(a);
    });
    
    // выведет:
    // Onk|gnb`rek|
    // test
    // test3


    Самое интересное что
    { USERNAME: <Buffer cf ee eb fc e7 ee e2 e0 f2 e5 eb fc> }
    похоже имеет кодировку ascii (и точно не utf8)

    а { USERNAME: <Buffer 74 65 73 74> } и { USERNAME: <Buffer 74 65 73 74 33> } имеют кодировку utf8.

    в идеале, прежде чем все это декодировать, вам бы разобраться почему имена пользователей попали к вам в разных кодировках, иначе будете в последствии ловить лаги с кодировками