Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Отлов серверных ошибок {success:false} (https://javascript.ru/forum/extjs/62978-otlov-servernykh-oshibok-%7Bsuccess-false%7D.html)

khusamov 11.06.2016 00:12

Есть что-нибудь посвежее чем этот модуль?
https://github.com/jurisv/nodejs.extdirect

Он похоже не поддерживается.
ЕС6 игнорирует.
С путями проблемы, требует чтобы скрипт, генерирующий процесс и папка с API лежали на одном уровне.

khusamov 11.06.2016 00:53

Можете поздравить. Прикрутил модуль https://github.com/jurisv/nodejs.extdirect к своему приложению.

Правда с путями к API проблема. Там нельзя указать абсолютный путь. Что с этим делать пока не знаю...
Если разрабы ничего не будут делать, то придется этот модуль переписывать самому. В таком виде он не совсем удобоварим.

nohuhu 13.06.2016 21:13

Поздравляю. ;) Насколько я знаю, этот модуль вполне поддерживается, так что открывайте тикеты и задавайте вопросы. Автор модуля, Юрис, по-русски говорит отлично. ;)

khusamov 07.03.2017 20:41

Ура! Сделал домен и теперь можно глобально отлавливать ошибки из прокси!

khusamov 07.03.2017 21:03

Вот пример кода:

/**
 * Глобальный отлов серверных ошибок (для таблиц grid).
 */
Ext.define('Pir.core.app.domain.PirReaderJson', {
    extend: 'Ext.app.EventDomain',
    singleton: true,
    
    requires: [
        'Pir.core.data.reader.Json'
    ],
    
    type: 'pirReaderJson',
	prefix: 'pirReaderJson.',
	idMatchRe: /^\#/,
    
    constructor: function() {
        var me = this;
        
        me.callParent();
        me.monitor(Pir.core.data.reader.Json);
    },

    match: function(target, selector) {
        var result = false;
        //var  alias = target.alias;
        
        if (selector === '*') {
            result = true;
        }
		
		//  else if (this.idMatchRe.test(selector)) {
        //     result = target.getStoreId() === selector.substring(1);
        // } else if (alias) {
        //     result = Ext.Array.indexOf(alias, this.prefix + selector) > -1;
        // }
        return result;
    }

});


/**
 * Этот класс создан для работы домена Pir.core.app.domain.PirReaderJson.
 */
Ext.define("Pir.core.data.reader.Json", {

	extend: "Ext.data.reader.Json",

	alias: "reader.pir-json",

	getResponseData: function() {
		var result = this.callParent(arguments);

		if (result.ErrorCode != "1") {
			this.fireEvent("pirerror", result.ErrorDescription, result);
		}

		return result;
	}

});


/**
 * The main application class. An instance of this class is created by app.js when it
 * calls Ext.application(). This is the ideal place to handle application launch and
 * initialization details.
 */
Ext.define('PirDesktopFirst.Application', {
    extend: 'Ext.app.Application',
    
    name: 'PirDesktopFirst',

	controllers: ["Pir.core.controller.Root"],

    stores: [
        // TODO: add global / shared stores here
    ],
    
    launch: function () {
        Pir.Core.selectServer("first");
    },

    onAppUpdate: function () {
        Ext.Msg.confirm('Application Update', 'This application has an update, reload?',
            function (choice) {
                if (choice === 'yes') {
                    window.location.reload();
                }
            }
        );
    }
});


Ext.define("Pir.core.controller.Root", {
	
	extend: "Ext.app.Controller",

	requires: ["Pir.core.app.domain.PirReaderJson"],
	
	init: function() {
		this.listen({
			pirReaderJson: {
				"*": {
					pirerror: this.onPirReaderJsonEvent
				}
			}
		});
	},

	onPirReaderJsonEvent: function(errorDescription, result) {
		Ext.toast({
			html: errorDescription,
			title: 'Ошибка на сервере',
			width: 400
		});
	}

});

nohuhu 08.03.2017 23:34

Интересный пример, но я бы ловил ошибки на транспорте; когда данные уже доползли до reader, обычно бывает уже поздно пытаться что-то делать с запросом.

В Ext Direct есть механизм исключений, можно бросать их на сервере при обработке запросов и ловить на клиенте.

khusamov 08.03.2017 23:35

А что значит ловить ошибки на транспорте?

khusamov 26.03.2017 23:20

Если речь идет (ловить на транспорте) до того, как данные превратятся в JSON, то данные будут ДВА РАЗА превращаться в JSON. Что не есть хорошо.


Часовой пояс GMT +3, время: 09:47.