Тайм аут в Api rest Express Nodejs - PullRequest
3 голосов
/ 13 февраля 2020

Я хочу поставить свой API в тайм-аут. Я пытался выразить это «глобально», когда создаю сервер, но в ответе говорится только, что данные не возвращены, а не ошибка 504. У меня также есть возможность разместить его для каждого маршрута, я думаю, что время ожидания должно go в контроллере моего приложения.

function initialize() {
  return new Promise((resolve, reject) => {
    const app = express();
    httpServer = http.createServer(app);
    app.use(morgan('combined'));
    app.use('/proyecto', router_proyecto);
    app.use('/tramitacion',router_tramitacion);
    httpServer.listen(webServerConfig.port, err => {
      if (err) {
        reject(err);
        return;
      }
    //httpServer.timeout = 500;
      console.log('Servidor web escuchando en puerto:'+webServerConfig.port);
      resolve();
    });
  });
}

пример маршрута:

router_proyecto.route('/getProyecto/:proyid?')
    .get(proyecto.getProyecto);

Контроллер (Тайм-аут должен go здесь):

async function getProyecto(req, res, next) {
  try {
    const context = {};
    context.proyid = parseInt(req.params.proyid, 10);
    const rows = await proyectos.getProyecto_BD(context);
    if (rows.length >0) {
      res.status(200).json(rows);
    } else {
      res.status(404).end();
    }
    } catch (err) {
    next(err);
  }
}
module.exports.getProyecto = getProyecto;

1 Ответ

0 голосов
/ 13 февраля 2020

Что значит для вас «тайм-аут»? Поскольку время ожидания - это четко определенный термин в Javascript, и ваш сервер определенно не должен его использовать. Если вы хотите, чтобы ваш сервер просто обслуживал некоторый контент с указанным c HTTP-кодом, в зависимости от какого-либо глобального флага, то вы были на правильном пути, за исключением того, что вам нужно написать его как промежуточное ПО.

let lock = Date.now();

function serveLockContent(req, res, next) {
  if (lock <= Date.now()) {
    return next();
  }

  res.status(503).write('Server unavailable');
}

...

app.use(serveLockContent);

...    

app.post('/lock/:seconds', verifyAuth, otherMiddlerware, (req, res) => {
  lock = Date.now() + (parseInt(req.params.howlong) || 0) * 1000;
  res.write('locked');
});
...