簡體   English   中英

Api rest Express Nodejs 超時

[英]Time Out in Api rest Express Nodejs

我想把我的 api 超時。 我在創建服務器時嘗試以“全局”方式放置它,但答案只說沒有返回數據,而不是 504 錯誤。 我也可以選擇為每條路線放置它,我認為超時應該放在我的應用程序的控制器中。

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);

控制器(超時應該在這里):

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;

“超時”對你來說意味着什么? 因為 aa timeout 在 Javascript 中是一個定義明確的術語,您的服務器絕對不應該使用它。 如果您希望您的服務器根據某個全局標志簡單地使用特定的 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');
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM