Есть ли способ избежать множественного следующего () в промежуточном ПО Express

#include <string>
#include <sstream>

namespace patch
{
    template < typename T > std::string to_string( const T& n )
    {
        std::ostringstream stm ;
        stm << n ;
        return stm.str() ;
    }
}

#include <iostream>

int main()
{
    std::cout << patch::to_string(1234) << '\n' << patch::to_string(1234.56) << '\n' ;
}

не забудьте включить #include <sstream>

0
задан Dave 20 March 2019 в 03:47
поделиться

1 ответ

Вот один из способов разбить каждый hasValid на свое промежуточное ПО. Каждое промежуточное ПО будет закорачивать выполнение, если результат действителен :

const validA = async (req, res, next) => {
  if (hasValidA(req)) {
    res.send('something secret') 
  } else {
    next()
  }
}

const validB = async (req, res, next) => {
  if (hasValidB(req)) {
    res.send('something secret')
  } else {
    next()
  }
}

const validC = async (req, res, next) => {
  if (hasValidC(req)) {
    res.send('something secret') 
  } else {
    next()
  }
}

const validD = async (req, res, next) => {
  if (hasValidD(req)) {
    res.send('something secret')
  } else {
    next()
  }
}

router.use(validA, validB, validC, validD)
router.get('*', (req, res) => {
  res.send('something public')
})
<час>

Обновление

Для достижения некоторого подобного результата с кодом ОП, но только с одним next():

const secretSender = async (req, res, next) => {
  if (hasValidA(req) && hasValidB(req) && hasValidC(req) && hasValidD(req)) {
    res.send('something secret')
  } else {
    next()
  }
}

router.use(secretSender)
router.get('*', (req, res) => {
  res.send('something public')
})
0
ответ дан IronGeek 20 March 2019 в 03:47
поделиться
Другие вопросы по тегам:

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