BAE部署Node.js时可能出现的一些错误

项目里有个Node.js编写的代理接口, 因为对带宽有要求, 所以选定了BAE作为平台进行部署. 可代码刚传上去, 问题就接二连三的出现, 等我把问题都解决完, 已经过去2个小时了.

BAE给出的错误非常模糊, 所以查错基本上要自己来, BAE能给出的错误有以下几种:

版本发布失败,请稍候重试

在发布代码时出现, 如果出现这个错误, 请检查代码包里是否包含正确格式的app.conf.

app.conf这个文件主要是控制前端请求的, 所有请求都会先经过它, 然后它按照规则将行为指派给对应的文件.

如果你是直接在BAE的帮助文档里复制下来的app.conf代码, 请检查一下文本缩进是否正常.

404 – Not Found

会在访问BAE应用时出现, 原因是没有app.conf文件, 请求无法处理, 所以都变成404页面.

新建一个包含以下内容的app.conf文件即可:

handlers:  
  - url : favicon.ico
    script: favicon.ico
  - url : (.*)
    script: $1.nodejs

 500 Not Found This Server

属于程序逻辑错误, 出现这个错误意味着你的服务器很可能没有正确启动.

在BAE的后台打开”应用日志”, 应该能看到一些相关的错误日志.

通常引起这个错误的原因是代码中的模块无法加载, 如果你本地测试没有问题的话, 很可能是依赖中包含C++ addon模块, C++ addon在BAE中是因为安全问题而被禁用的, 解决方法只有换模块或者用Node.js实现.

An error has occurred

该错误有2种形式, 但实际上都是同一个问题:

  1. An error has occurred: {“code”:”ECONNRESET”}
  2. An error has occurred: {“code”:”ECONNREFUSED”,”errno”:”ECONNREFUSED”,”syscall”:”connect”}

两种错误可能会轮流出现, 原因在于虽然你的Node.js成功启动了服务器, 但是程序逻辑包含错误, 导致连接重置和监听断开.

在BAE的后台打开”应用日志”, 应该能看到一些相关的错误日志.

这方面的问题大多数是Node.js版本的问题, 因为Node.js版本之间的兼容性非常差, 所以一些对象或方法在BAE上无法使用, 建议在部署代码前用BAE使用的v0.8.14(我写这篇文章时的内测版本)先跑一遍, 或者直接用BAE上的版本作为开发环境.