• Как это работает?

    Negezor
    @Negezor
    Senior Shaurma Developer
    Вы путаете синхронный код и асинхронный, вызов bot.telegram.getChat() немедленно возвращает Promise и ваш код по этому уже отправил ответ. Вот как нужно сделать:
    app.get('/chat/:chat', (req, res) => {
        const chat = req.params.chat;
        const json = {};
    
        bot.telegram.getChat(chat).then((info) => {
            json.success = true;
            json.info = info;
    
            res.json(json);
        }).catch((error) => {
            json.success = false;
            json.info.error = error.code;
            json.info.method = error.on.method;
            json.info.description = error.description;
    
            res.json(json);
        });
    });

    Или как можно сделать это по современному:
    app.get('/chat/:chat', async (req, res) => {
    	const { chat } = req.params;
    	const json = {};
    
    	try {
    		const info = await bot.telegram.getChat(chat);
    
    		json.success = true;
    		json.info = info;
    	} catch (error) {
    		json.success = false;
    		json.info.error = error.code;
    		json.info.method = error.on.method;
    		json.info.description = error.description;
    	}
    
    	res.json(json);
    });
    Ответ написан
    2 комментария
  • Какой метод лучше и почему?

    @D3lphi
    Потому что контроллер по своей сути не должен работать с данными, не должен содержать логику. Его задача - принять запрос, возможно, проверить данные на валидность и отдать ответ. Всё! Больше он делать ничего не умеет. Вся бизнес логика должна выноситься в сервисный слой. А из контроллера вы будете лишь вызывать метод этого сервиса и получать ответ. В принципе, в контроллере можно писать логику, если код короткий, тогда, конечно, создавать сервис будет излишним. С данными должен работать репозиторий (как по ссылке, которую вы привели)! Не нужно делать этого в контроллере.
    Мне привычно работать с моделью прямо в контроллере

    Может быть вам и привычнее, но это не правильно. Контроллеры разрастаются и становятся жирными. Отсюда же вытекает и то, что вам приходится дублировать код.
    $post = new Post;
    $post->slug = $request->slug;
    $post->name = $request->name;
    $post->story = $request->story;
    $post->save();

    Этот кусок вам, возможно, потребуется использовать еще где-то. И да, вот такой способ, если вашей целью является просто вставка данных, юзать не стоит. В этом нет смысла. Лучше воспользоваться методом create() или же insert().
    Ответ написан
    7 комментариев
  • Как правильно выводить многоуровневое меню?

    Eridani
    @Eridani
    Мимо проходил
    Пусть каждый вложенный пункт меню в ключе имеет ID своего родителя, а потом выводить уровни как-то так (пример не из ларавел)
    <? foreach($result['rows'][$firstLevel['id']] as $secondLevel) : ?>
    Ответ написан
    Комментировать