AppEngine部署含JS与NodeJS服务的Web应用时app.yaml配置问题排查
看起来你遇到的两个问题都是app.yaml配置不当导致的,我来帮你一步步梳理解决:
问题1:index.js因MIME类型错误被阻止
根源分析
- 你的
index.html里脚本引用写的是<script src="js/index"></script>,但实际文件是index.js,浏览器请求/js/index时找不到对应文件,服务器返回的404错误页面是text/html类型,触发了浏览器的MIME类型校验错误。 - 另外,当前app.yaml里的静态文件规则只映射了
/www路径,而你的脚本是从根路径下的js/目录请求的,即使补全.js后缀,也无法正确匹配到www/js/下的文件。
修复步骤
- 先修改
index.html中的脚本引用,补全.js后缀:
<script src="js/index.js"></script>
- 在app.yaml中添加专门匹配
/js路径的静态文件规则:
- url: /js static_dir: www/js
问题2:/srv请求返回404错误
根源分析
App Engine会按顺序匹配你配置的handlers规则,当请求/srv时,它既不匹配任何静态文件规则,也没有规则把它转发给你的Node.js应用,所以直接返回404。你需要添加一个“兜底”规则,让所有未匹配的请求都交给Express服务器处理。
修复步骤
在app.yaml的handlers列表最后添加以下规则:
- url: /.* script: auto
完整的正确app.yaml配置
runtime: nodejs10 handlers: # 根路径返回首页 - url: / static_files: www/index.html upload: www/index.html # /index路径返回首页 - url: /index static_files: www/index.html upload: www/index.html # /page2路径返回对应页面 - url: /page2 static_files: www/page2.html upload: www/page2.html # 处理/js下的静态脚本文件 - url: /js static_dir: www/js # 处理/www路径下的静态资源(若有需要) - url: /www static_dir: www # 所有未匹配的请求交给Node.js应用处理 - url: /.* script: auto
额外提醒
本地运行时你直接启动了Node.js服务器,所以需要依赖Express的静态文件中间件才能访问静态资源,但部署到App Engine后,推荐用app.yaml配置静态资源规则,性能会更好。如果本地想模拟App Engine的行为,也可以配合对应的本地开发工具。
内容的提问来源于stack exchange,提问作者Kian Soltani
相关产品推荐
相关产品推荐

