node.js之Api rest Express Nodejs 超时

langtianya 阅读:15 2024-02-23 17:27:14 评论:0

我想让我的 api 超时。我在创建服务器时尝试以“全局”方式放置它,但答案只是说没有返回任何数据,而不是 504 错误。我也可以选择为每条路线放置它,我认为超时应该放在我的应用程序的 Controller 中。

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

Controller (超时应该放在这里):

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; 

请您参考如下方法:

“超时”对您来说意味着什么?因为超时是 well defined term in 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'); 
}); 


标签:NodeJs
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号