Node.js始终给出503错误

iyfjxgzm  于 2022-12-12  发布在  Node.js
关注(0)|答案(2)|浏览(219)

我刚刚安装了Node.js,让它工作了一段时间,然后尝试运行一个标准的Hello World程序。

var http = require("http");

http.createServer(function (request, response) {

   // Send the HTTP header
   // HTTP Status: 200 : OK
   // Content Type: text/plain
   response.writeHead(200, {'Content-Type': 'text/plain'});

   // Send the response body as "Hello World"
   response.end('Hello World\n');
}).listen(8081);

// Console will print the message
console.log('Server running at http://127.0.0.1:8081/');

然后,我启动了为节点http://node.foobar.com设置的域--上周在我的域上进行了相同的操作,我成功地让它打印了Hello World
上周也是这样,我关闭了服务器,编辑了代码,然后重新运行服务器,如果我不等几分钟再运行的话,服务器就会变成503。但是,这次等也没用。
域的Apache配置:

<VirtualHost *:80>
ServerAdmin zadmin@localhost
DocumentRoot "/var/zpanel/hostdata/zadmin/public_html/node"
ServerName node.foobar.com

ProxyRequests on
ProxyPass / http://localhost:3102/

# Custom settings are loaded below this line (if any exist)
</VirtualHost>
b0zn9rqh

b0zn9rqh1#

如何设置域?
是否使用其他HTTP服务器作为代理?
请检查节点是否正在运行,如果是,请检查HTTP服务器是否也在运行。
可能是您的节点崩溃或只是没有运行。
另一个测试是直接连接节点:
http://127.0.0.1:8081/

bjp0bcyl

bjp0bcyl2#

我也遇到了同样的问题。我们使用(不再支持的)“node-ews”库从我们的Exchange服务器加载电子邮件/附件,它经常抛出503错误。
我的同事告诉我,meh,这是微服务的预期行为(真的吗?),我只需要使用一个库来增加一些弹性,例如。
https://github.com/resilient-http/resilient.js/#how-does-it-work
我的解决方案是实际调用Exchange端点,如果是503错误,记录它(并显示我们重试了多少次),等待一秒钟,然后重试。这确实为我解决了问题。

var EXCHANGE_SLEEP_TIME = 1000;
  var EXCHANGE_MAX_RETRIES = 20;
  var retryNumber = 0;
  var bSuccess = false;
  do {
      //  Attempt to update the categories on this email ("UpdateItem" function), but be careful of 503 errors.
      await ews.run(ewsUpdateFunction, updateArgs)
          .then(result => {
              //  Do something with the result
              bSuccess = true;
          })
          .catch(err => {
              var statusCode = (err.response) == null ? -1 : err.response.statusCode;
              var errorString = `setEmailCategory, attempt: ${++retryNumber}, statusCode: ${statusCode}`;
              if (statusCode != 503) 
                  errorString += `, exception: ${JSON.stringify(err)}`;
              console.log(errorString);
              this.sleep(EXCHANGE_SLEEP_TIME);
          });
  } while (retryNumber < EXCHANGE_MAX_RETRIES && !bSuccess);

  . . . 

  public sleep(ms: number) {
      //  Dumb function, to make the code go to sleep for XX milliseconds
      return new Promise( resolve => setTimeout(resolve, ms) );
  }

是的,它很丑,但可怕的是,它工作得很好。
显然,“真实的”版本将消息记录到日志服务,而不是控制台。

相关问题