我正在测试MEAN堆栈应用程序。我有一个Node.js后端,用于处理文件上传(通过fs/multer
)。但是,在生产中尝试击中它时,我收到503错误。
在本地,一切正常。我正在使用Heroku的免费套餐;该层是否被锁定以不允许文件上传?
我当前正在尝试(已经尝试了几次)的上传只有36kb(.png
)。
浏览了我的日志,找到了503-
2018-10-26T20:39:24.352297+00:00 heroku[router]: at=error code=H13 desc="Connection closed without response" method=POST path="/media/upload" host=www.example.co.uk request_id=5388711c-bc99-4e42-9dbd-7b645fbefb43 fwd="90.222.69.255" dyno=web.1 connect=1ms service=130ms status=503 bytes=0 protocol=http
2018-10-26T20:39:24.306975+00:00 app[web.1]: (node:20) [DEP0013] DeprecationWarning: Calling an asynchronous function without callback is deprecated.
2018-10-26T20:39:24.307037+00:00 app[web.1]: (node:20) [DEP0013] DeprecationWarning: Calling an asynchronous function without callback is deprecated.
2018-10-26T20:39:24.318818+00:00 app[web.1]: fs.js:113
2018-10-26T20:39:24.318822+00:00 app[web.1]: throw err; // Forgot a callback but don't know where? Use NODE_DEBUG=fs
2018-10-26T20:39:24.318824+00:00 app[web.1]: ^
2018-10-26T20:39:24.318826+00:00 app[web.1]:
2018-10-26T20:39:24.318828+00:00 app[web.1]: Error: ENOENT: no such file or directory, mkdir './uploads/18'
答案 0 :(得分:1)
文件上传不应自行生成HTTP 503。您应该检查日志(通过heroku logs
)以获取有关失败原因的更多信息。话虽如此,即使您解决了这个问题,您可能也需要对处理文件上传的方式进行根本性的改变。
所有Heroku层都有一个ephemeral filesystem。每当您的dyno重新启动时,对文件系统所做的任何更改都会丢失,happens frequently(每天至少一次)重新启动。
official recommendation将上传的文件放到第三方服务(如Amazon S3)上。 multer-s3
库应该可以提供帮助。