Как я могу использовать/изменить 2 «res.render» в разных файлах?

#javascript #node.js #routes #controller

Вопрос:

Я не знаю, можно ли использовать «res.render» дважды. Ошибка в том, что:

 C:ReactVapvapintosrccontrollerLaunchController.js:45
    return res.render('index', { launch })
               ^

TypeError: Cannot read property 'render' of undefined
 

Маршрутизатор у меня есть это:

 routes.get('/index', (req, res) => {
    if (req.isAuthenticated()) {
      // console.log(req.user)
      res.render('index', LaunchController.index, {user:req.user});
    } else {
      res.render('login', {
        title: 'Home',
        user: req.user,
        message: res.locals.message,
      });
    }
  }
)
 

в контроллере у меня есть это:

 async index(req,res) {
    const lancamentos = await Launch.get()

    let saldoAnterior = 0;

    let launch = lancamentos.map((item) => {     
       // Intl.NumberFormat('pt-br', {style: 'currency', currency: 'BRL'}).format(money)
      // .toLocaleString('pt-br',{style: 'currency', currency: 'BRL'})
      // .toFixed(2).replace('.', ',')

      const dataFormatada = LaunchUtils.dataFormatada(item)
      const receita = LaunchUtils.receita(item)
      const despesa = LaunchUtils.despesa(item)

      const saldoAtual = receita - despesa
      const saldo = saldoAnterior   saldoAtual;
      saldoAnterior = saldo;  

      return{        
        ...item,
        dataFormatada,
        receita, 
        despesa,
        saldo        
      }      
    })

    const month = '';
    if(month > 0) {
      launch = launch.filter(item => {    
        const month = req.query.month;
        const data = new Date(item.data);
        const dataString = (data.getFullYear()   "-"   ((data.getMonth()   1))   "-"   (data.getDate() ))
        
        return LaunchUtils.formatDate(dataString).getMonth() == month 
      })
    } 
    return res.render('index', { launch })
  }
 

Ответ №1:

Вы могли бы выполнить визуализацию в общем файле

Пример:

 module.exports = {

  renderApp(res, config){
    const defaults = {
        let a = 10,
        ...config
     };

     return res.render('index', defaults) // index path should've been set (app.set(....))
  }

}
 

Везде, где вы хотите использовать рендеринг, импортируйте его и используйте с соответствующими настройками

Комментарии:

1. Но где я должен назвать эти коды? в маршрутах или контроллерах? Моя идея заключается в том, что после подтверждения пользователя представление «индекс» будет отображаться с конфигурацией контроллера.

2. Из вашего кода выше я понимаю, что вы хотите отобразить индекс с некоторой конфигурацией, когда будет выбран маршрут «/index», и то же самое будет отображаться с данными конфигурации запуска в контроллере? Вы могли бы сделать что-то вроде app.use(‘/’, маршруты), которое приведет вас к маршрутам. js, где вы могли бы выполнить рендеринг с соответствующей конфигурацией для разных сценариев.