首页 > 解决方案 > 无法使用 node.js 获取请求超时响应

问题描述

我正在尝试在requestnode.js 的模块中设置超时值,但根据给定的时间它没有返回响应。我在下面解释我的代码。

postRequestOptions.url = `${nsoObj.protocol}://${nsoObj.ipAddress}:${nsoObj.httpPortNbr}/jsonrpc`;
    postRequestOptions.headers = {
      'Content-Type': 'application/json'
    };
    postRequestOptions.body = {
      jsonrpc: '2.0',
      id: 1,
      method: 'login',
      timeout: 5000,
      params: {
        user: nsoObj.userName,
        passwd: nsoObj.password
      }
    };

    request(postRequestOptions, (error, response, loginResponse) => {
      console.log('\n error: ', error);
      console.log('\n loginResponse: ', loginResponse);

      if (error || !loginResponse.id) {
        responseObj = {
          status : 'error',
          msg : `Error occurred while performing Login into "${nsoObj.nsoNickName}"  Instance. ${error}`,
          body : null
        };
        reject(responseObj);
      } else {
        loginResponse.sessionId = response.headers['set-cookie'][0];
        responseObj = {
          status : 'success',
          msg : `Successfully performing Login into "${nsoObj.nsoNickName}"  Instance`,
          body : loginResponse
        };
        resolve(responseObj);
      }
    });
  });

在这里,我正在使用request模块node.js并设置超时5ms。但是当我运行它时,它需要 2 分钟才能发回超时错误响应。

在这里,我需要如果此请求无法在其中发回响应,5 milisecond那么它应该返回超时错误。

标签: node.jsrequesttimeout

解决方案


从正文中删除超时并使用postRequestOptions.timeout = 5000;这样做:

postRequestOptions.url = `${nsoObj.protocol}://${nsoObj.ipAddress}:${nsoObj.httpPortNbr}/jsonrpc`;
    postRequestOptions.headers = {
      'Content-Type': 'application/json'
    };
    postRequestOptions.body = {
      jsonrpc: '2.0',
      id: 1,
      method: 'login',
      params: {
        user: nsoObj.userName,
        passwd: nsoObj.password
      }
    };
    postRequestOptions.timeout = 5000;//should be outside the body
    request(postRequestOptions, (error, response, loginResponse) => {
      console.log('\n error: ', error);
      console.log('\n loginResponse: ', loginResponse);

      if (error || !loginResponse.id) {
        responseObj = {
          status : 'error',
          msg : `Error occurred while performing Login into "${nsoObj.nsoNickName}"  Instance. ${error}`,
          body : null
        };
        reject(responseObj);
      } else {
        loginResponse.sessionId = response.headers['set-cookie'][0];
        responseObj = {
          status : 'success',
          msg : `Successfully performing Login into "${nsoObj.nsoNickName}"  Instance`,
          body : loginResponse
        };
        resolve(responseObj);
      }
    });
  });

推荐阅读