node.js - 将简单的 Express 应用部署到 Azure 应用服务
问题描述
我有一个非常简单的 Node/Express 应用程序,我试图在 Azure 应用程序服务中运行它。它的唯一目的是让我通过使用 Git 和 Azure Devops 逐步扩展应用程序来学习。
我已经被困住了。
我有一个本地文件夹“node-starter”,里面有我的 app.js、package.json、node-modules(包括 Express)等等。app.js 非常简单:
const express = require("express")
const app = express()
app.get("/", (req, res) => {
res.send({
"first": "jason",
"last": "bourne"
})
})
app.listen(3000,()=> {
console.log("server running....")
})
我的 package.json 也很简单:
{
"name": "node-starter",
"version": "1.0.0",
"description": "simple node and express app to test azure deployments",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node app.js"
},
"author": "",
"license": "ISC",
"devDependencies": {
"express": "^4.17.1"
}
}
当我使用 npm start 脚本在本地运行此应用程序时,应用程序会运行,我可以在 localhost 的 3000 端口上获得 json 响应。非常简单并且在本地完美运行。
然后我要做的是:
- 为这个简单的项目设置一个 Azure Devlop 项目和 repo,我称之为“node-simple”。
- 然后,我将我的 node-starter 文件夹的全部内容推送到该 repo 并目视检查所有内容是否存在并且看起来很好。确实如此。
- 然后我转到 Azure 应用程序并创建一个新的 Web 应用程序。我选择了一台免费的 Linux 机器,完成了设置应用程序的业务,然后去“部署中心”。
- 在部署中心,我告诉它在哪里可以找到代码仓库(在 Azure Devops 中),向导会找到它并允许我选择它。
- 我能够提供启动命令 (npm start) 和 Node 版本 (12 LTS) 等信息。然后我部署它,大约一分钟左右后,我收到一条消息说一切都成功了。
- 然后我回到 Azure Devops 项目,可以在管道中看到已经构建和发布到生产环境。所以,一切看起来都很好。没有错误。
但是,当我随后浏览到 App servive 提供的 URL 时,我通常会收到应用程序错误 503。当我单击链接以获取更多信息时,我会被带到一个空白的 Azure 帮助屏幕。只是三个闪烁的蓝色圆圈,永远不会发生任何事情。
可能出了什么问题?一切看起来都像它的设置和部署正常,应用程序一旦部署似乎就无法工作。它必须是简单的,对吧?
几个问题,如果允许的话:
- 在 app.js 中,我指定了端口 3000,这似乎是 Express 的默认端口。这是否意味着我需要将“:3000”附加到 Azure 提供的 URL,或者 Azure 是否知道代理该端口?
- 经过多次点击后,我在 Azure 中为该应用程序(Kudo)找到了一个 Bash shell。当我连接到它时,我看到我的应用程序代码似乎已部署到站点/wwwroot。我可以在那里看到我的文件和 app.js。我尝试在那里运行“npm start”,但还是不行。我尝试了一个“npm i”来尝试解决任何依赖问题 - 仍然没有好处。
我还尝试使用 VSCode 插件部署应用程序并得到完全相同的结果。请让我摆脱痛苦,告诉我哪里可能出错了。请。
解决方案
只有端口 80 和 443 对 Web 应用程序开放。您应该将侦听端口更改为process.env.PORT
.
const port = process.env.PORT;
app.listen(port);
推荐阅读
- python - 如何从图像中提取虚线文本?
- android - Android svg文件点击每个路径
- r - 增加观察次数有 R 抛出随机系数 - 数值稳定性问题?
- python - 只有未来数据具有重要缺失值的分类问题?
- python - 如何使用 Tensorflow(python) 为 keras model.fit() 创建我自己的数据集?
- python - 为什么熊猫会在加入后使用数据框?
- javascript - 为什么这个子对象是空的,不管我做什么?
- javascript - 它是对象还是数组?
- swift - 如何通过 IF 检查字符串的 endIndex?
- azure-devops - 使用 Azure DevOps / VSTS 失败的计划生成的电子邮件通知