Node.js Google App Engine 灵活生产环境中 public 目录的应用程序 404 错误
Node.js app 404 errors for public directory in Google App Engine Flexible production environment
我已经使用 Node.js Google App Engine 几个月了,并且总是成功地使用 express.static 解决方案来访问 public 中的静态文件我部署 node.js 应用程序时的文件夹。
出于某些(对我来说不是很明显的)原因,我最近很难在 Google 灵活的生产环境中进行这项工作。在我的本地开发环境中一切正常。
为了缩小问题范围,我创建了一个非常基本的测试应用程序,在此处列出:
'use strict'
const express = require('express')
const app = express()
const path = require('path')
const os = require('os')
const PORT = process.env.PORT || 8080
const ENV = process.env.NODE_ENV
//app.use(express.static('public'))
//app.use(express.static(path.resolve(__dirname, 'public')))
app.use(express.static(path.join(__dirname, 'public')))
app.listen(PORT, () => {
console.log(`SYSTEM: App listening on port ${PORT}`)
console.log(`SYSTEM: Press Ctrl+C to quit.`)
})
app.get('/', (req,res) => {
res.status(200).send('\
<h1>TEST app.use(express.static("public")) in Google Cloud Flexibel App Engine environment </h1>\
<hr/>\
<h4>YAML settings: runtime: nodejs env: flex</h4>\
<h4>HOST : '+`${os.hostname()}`+'</h4>\
<h4>PORT : '+`${PORT}`+'</h4>\
<h4>__dirname : '+`${__dirname}`+'</h4>\
<h4>mountpath : '+`${app.mountpath}`+'</h4>\
<h4>env : '+`${ENV}`+'</h4>\
<h4>path resolved: '+`${path.resolve(__dirname, 'public')}`+'</h4>\
<h4>path joined : '+`${path.join(__dirname, 'public')}`+'</h4>\
<hr/>\
<h2>If you see me <img src="./HB.png"> you can access "./HB.png" in the "public" directory.</h2>\
<h2>If you see me <img src="/HB.png"> you can access "/HB.png" in the "public" directory.</h2>\
<h2>If you see me <img src="HB.png"> you can access "HB.png" in the "public" directory.</h2>\
<hr/>\
')
})
我尝试了 express.static 设置的各种设置(请参阅那些被注释掉的设置)。但是每次部署后使用
gcloud 应用部署
Google production 我得到 404(也在 google 日志中)。本地开发环境一切正常
这里是生产环境的输出:
Production
这里是本地开发环境的输出:
Local Development
正如您在 Google prod 上看到的那样,指向 HB.png 的图像链接已损坏。在 Google 日志中出现 404。
有人知道吗?提前致谢!
奇怪,我通过重新安装Google Cloud SDK解决了这个问题。
我已经使用 Node.js Google App Engine 几个月了,并且总是成功地使用 express.static 解决方案来访问 public 中的静态文件我部署 node.js 应用程序时的文件夹。
出于某些(对我来说不是很明显的)原因,我最近很难在 Google 灵活的生产环境中进行这项工作。在我的本地开发环境中一切正常。
为了缩小问题范围,我创建了一个非常基本的测试应用程序,在此处列出:
'use strict'
const express = require('express')
const app = express()
const path = require('path')
const os = require('os')
const PORT = process.env.PORT || 8080
const ENV = process.env.NODE_ENV
//app.use(express.static('public'))
//app.use(express.static(path.resolve(__dirname, 'public')))
app.use(express.static(path.join(__dirname, 'public')))
app.listen(PORT, () => {
console.log(`SYSTEM: App listening on port ${PORT}`)
console.log(`SYSTEM: Press Ctrl+C to quit.`)
})
app.get('/', (req,res) => {
res.status(200).send('\
<h1>TEST app.use(express.static("public")) in Google Cloud Flexibel App Engine environment </h1>\
<hr/>\
<h4>YAML settings: runtime: nodejs env: flex</h4>\
<h4>HOST : '+`${os.hostname()}`+'</h4>\
<h4>PORT : '+`${PORT}`+'</h4>\
<h4>__dirname : '+`${__dirname}`+'</h4>\
<h4>mountpath : '+`${app.mountpath}`+'</h4>\
<h4>env : '+`${ENV}`+'</h4>\
<h4>path resolved: '+`${path.resolve(__dirname, 'public')}`+'</h4>\
<h4>path joined : '+`${path.join(__dirname, 'public')}`+'</h4>\
<hr/>\
<h2>If you see me <img src="./HB.png"> you can access "./HB.png" in the "public" directory.</h2>\
<h2>If you see me <img src="/HB.png"> you can access "/HB.png" in the "public" directory.</h2>\
<h2>If you see me <img src="HB.png"> you can access "HB.png" in the "public" directory.</h2>\
<hr/>\
')
})
我尝试了 express.static 设置的各种设置(请参阅那些被注释掉的设置)。但是每次部署后使用 gcloud 应用部署 Google production 我得到 404(也在 google 日志中)。本地开发环境一切正常
这里是生产环境的输出:
Production
这里是本地开发环境的输出:
Local Development
正如您在 Google prod 上看到的那样,指向 HB.png 的图像链接已损坏。在 Google 日志中出现 404。
有人知道吗?提前致谢!
奇怪,我通过重新安装Google Cloud SDK解决了这个问题。