@Mr_Epic
Web программист

Как выводить информацию пользователю в koajs?

Например есть вот такой код:
let userRouter = new Router({prefix: '/user'});//koa-router
userRouter.use(authCheck);

userRouter.get('/settings', async (ctx) => {
    await ctx.render('settings',{message: '???'});//Откуда брать сообщение, если это уже другой ctx?
});
userRouter.post('/settings', async (ctx) => {
    const data = ctx.request.body;
    if(!data.email || !data.email.length) ctx.message = 'Введите почту!';
    if(!data.password || !data.password .length) ctx.message = 'Введите пароль!';
    await ctx.redirect('/user/settings');
});


Как выводить информацию пользователю, если он перенаправляется с этой страницы?

Корректно ли рендерить в двух местах, например при ошибке рендерить эту же страницу в пост запросе, вот так:
userRouter.get('/settings', async (ctx) => {
    await ctx.render('settings',{message: false});//#1
});
userRouter.post('/settings', async (ctx) => {
    const data = ctx.request.body;
    let err = false;
    if(!data.email || !data.email.length) err = 'Введите почту!';
    if(!data.password || !data.email.password) err = 'Введите пароль!';
    
    await ctx.render('settings', {message: err});//#2
});


Если это нормально решение, то как выводить информацию, например о успешном входе, там явно должно быть перенаправление со страницы авторизации.
  • Вопрос задан
  • 43 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Mr_Epic Автор вопроса
Web программист
Сообщения можно сохранять с помощью koa-session.
Например:
userRouter.post('/settings', async (ctx) => {
    const data = ctx.request.body;
    if(!data.email || !data.email.length) {
        ctx.session.messages.push('Введите почту!');
        ctx.redirect('/user/settings');
    }
});


Выводить информацию можно вот так:
userRouter.get('/settings', async (ctx) => {
    await ctx.render('settings',{message: ctx.session.messages});
});


Так же не забываем про первое посещения, когда messages ещё не существует:
app.use(async (ctx,next)=>{
    if(!ctx.session.messages) ctx.session.messages = [];
    await next();
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы