id_pripyat
@id_pripyat

Можно ли использовать больше одного app.render()?

Есть вопрос, как сделать ту же задачу, по выводу новостей, без использования большого количества app.render(). Есть ли возможность использовать только один app.render()?


Код:

const express = require('express')
const app = express();
const hbs = require('handlebars')
const cons = require('consolidate');
const bodyParser = require('body-parser')
const urlencodedParser = bodyParser.urlencoded({ extended: false })

var yandex = {
    newsOne: 'Новость 1',
    newsTwo: 'Новость 2',
    newsThree: 'Новость 3',
    newsFour: 'Новость 4',
    newsFive: 'Новость 5'
}

var lenta = {
    newsOne: 'Новость 1',
    newsTwo: 'Новость 2',
    newsThree: 'Новость 3',
    newsFour: 'Новость 4',
    newsFive: 'Новость 5'
}

var tj = {
    newsOne: 'Новость 1',
    newsTwo: 'Новость 2',
    newsThree: 'Новость 3',
    newsFour: 'Новость 4',
    newsFive: 'Новость 5'
}

app.engine('hbs', cons.handlebars)
app.set('view engine', 'hbs')


app.get('/', function(req, res) {
    res.render('index', {})
})

app.post('/', urlencodedParser, function(req, res) {
    if (req.body.news == 'yandex') {
        console.log('Был получен запрос: Яндекс.Новости')
        res.render('index', yandex)
    } else if (req.body.news == 'lenta') {
        console.log('Был получен запрос: Лента')
        res.render('index', lenta)
    } else if (req.body.news == 'tj') {
        console.log('Был получен запрос: TJ')
        res.render('index', tj)
    }
})

app.listen('9000')


И есть hbs шаблон:
1. Это отвечает за выдачу новостей
<div id="getNews">
            <p>
                <p>{{newsOne}}</p>
                <p>{{newsTwo}}</p>
                <p>{{newsThree}}</p>
                <p>{{newsFour}}</p>
                <p>{{newsFive}}</p>
            </p>
        </div>


2. Это за выбор новостей:
<form id="input" method="post">
            <p>Пожалуйста, выберите источник, с которого мы будем отправлять Вам новости:</p>
            <div>
                <input type="radio" id="yandex"
                name="news" value="yandex" form="input">
                <label for="yandex">Яндекс Новости</label>

                <input type="radio" id="lenta"
                name="news" value="lenta" form="input">
                <label for="lenta">Лента</label>

                <input type="radio" id="tj"
                name="news" value="tj" form="input">
                <label for="tj">TJ</label>
            </div>
            <div>
                <button type="submit">Submit</button>
            </div>
        </form>
  • Вопрос задан
  • 88 просмотров
Решения вопроса 1
Krasnodar_etc
@Krasnodar_etc
fundraiseup
Про какие именно app.render() вы говорите?

Если я правильно понял, хотите убрать дублирование кода в функции, слушающей POST на урл '/' ? Тогда так, например:

var news = {
    yandex: {
        newsOne: 'Новость 1',
        newsTwo: 'Новость 2',
        newsThree: 'Новость 3',
        newsFour: 'Новость 4',
        newsFive: 'Новость 5'
    },
    lenta: {
        newsOne: 'Новость 1',
        newsTwo: 'Новость 2',
        newsThree: 'Новость 3',
        newsFour: 'Новость 4',
        newsFive: 'Новость 5'
    },
    tj: {
        newsOne: 'Новость 1',
        newsTwo: 'Новость 2',
        newsThree: 'Новость 3',
        newsFour: 'Новость 4',
        newsFive: 'Новость 5'
    },
}

...

app.post('/', urlencodedParser, function(req, res) {
    console.log('Был получен запрос: ' + req.body.news)
    res.render('index', news[req.body.news]);
})
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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