Получение «self._form.on не является функцией» при использовании запросов узлов в электронном приложении - PullRequest
0 голосов
/ 18 сентября 2018

Я создаю приложение Electron с Vue.js в качестве клиентской среды.Когда я пытаюсь запустить скрипт узла, я получаю Uncaught (в обещании) TypeError: self._form.on не является функцией

Я не уверен, что это из-за того, чтозапустить в браузере через электрон, но он работает нормально, когда я запускаю скрипт через Node в консоли.Можно ли вообще запустить этот сценарий на стороне клиента?Я запускаю файл узла через один из компонентов frontend vue.js, требуя файл. let raffleScript = require ('../ raffles / index.js');

Сценарий узла:

var cheerio = require('cheerio');
var fs = require('fs');

var retryDelay = 300; 
var tasks = 200; 


var userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36';
var tasksComplete = 0;
var exportedCount = 0;
// Export the values
//setInterval(countUpdate, 4000);

initProxies();

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
  }

async function initProxies() {
    for (var i = 0; i < tasks; i++) {
        submitRaffle(i);
        await sleep(retryDelay);
        // setTimeout(function () {
        //  submitRaffle(i);
        // }, retryDelay)
    }
}

function submitRaffle(taskNum) {
    var jar = require('request').jar()
    var request = require('request').defaults({
        jar: jar
    });


    console.log('Making request.............................');
    request({
        url: 'bungeedesign.com/dev',
        method: 'POST',
        headers: {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
            'Content-Type': 'application/x-www-form-urlencoded'
        },
        formData: 
        { firstname: 'James',
          name: '',
          lastname: 'Rogers',
          mobileNumber: '00000000',
          email: 'email@email.com',
          raffle_type: 'Development',
          checkbox_0: 'Backend',
          personal_or_business: 'Personal',
          model: 'Register Of Interests',
          'submit-0': 'Keep me posted' },
    }, function (error, response, body) {
        // console.log('REQ RES --------->>>> ', response);
        //console.log('Req Completed', response);
        if (error) {
            console.log('Error.............................');
            setTimeout(function () {
                submitRaffle(taskNum)
            }, retryDelay)
            return;
        }
        $ = cheerio.load(body);
        if (response.statusCode == 302) {
            //if (JSON.parse(body).message == "successfully") {
                console.log('\x1b[1;32m', "[" + taskNum + "] - Raffle entry submitted");
                tasksComplete++;
                //module.exports.exportedCount = tasksComplete;
                console.log('\x1b[1;32m', "[" + taskNum + "] - " + tasksComplete + " Entries submitted.")
            //}
        } else {
            setTimeout(function () {
                submitRaffle(taskNum)
            }, retryDelay)
            return;
        }
    });
}


// Increment Exports

// function countUpdate() {
//  module.exports.exportedCount = exportedCount++;
// }

Компонент Main.vue (скрипт)

let raffleScript = require('../raffles/index.js');
    export default {
        data() {
            return {
                amount: '0'
            }
        },
        methods: {
            async register() {
                try {
                    await AuthenticationService.register({
                        key: this.key
                    })
                } catch (error) {
                    this.error = error.response.data.error
                }
            },

            async entryAmountChange() {
                let entryAmount = document.querySelector('.tsEntryAmount').value;
                let replaced = entryAmount.replace(/\D/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",");
                document.querySelector('.tsEntryAmount').value = replaced;               
            },
            async runRaffle() {
                console.log("Log: ", raffleScript.exportedCount);
                this.entryAmount = raffleScript.exportedCount;
            },
            runTime: function() {
                function checkTime(i) {
                    return (i < 10) ? "0" + i : i;
                }

                function startTime() {
                    let today = new Date(),
                        h = checkTime(today.getHours()),
                        m = checkTime(today.getMinutes()),
                        s = checkTime(today.getSeconds());
                    let timeElement = document.querySelector('#time');
                    let time = h + ":" + m + ":" + s;
                    // this.time = "dsdsd";
                    document.querySelector('#time').innerHTML = time;
                    setTimeout(function () {
                        startTime()
                    }, 500);
                }
                startTime();
            },
            async getValues() {
                console.log("Log: ", raffleScript.tasksComplete);
            }
        },
        mounted(){
            this.runTime();
            this.getValues();
            this.runRaffle();
        }
    }

1 Ответ

0 голосов
/ 19 сентября 2018

Не удалось заставить его работать с модулем Node Requests.Я попробовал Axios, и это сработало, хотя у меня были некоторые проблемы с CORS.Затем я наткнулся на Needle https://www.npmjs.com/package/needle, который отлично работал!

Не уверен, почему Node Requests не работает при использовании formData.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...